参数.与罗斯林一起检查
本文关键字:检查 一起 罗斯林 参数 | 更新日期: 2023-09-27 17:56:46
我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数:
代码契约:当第三方库不支持它时,它会让你感到紧张。
public void Buy(Product product)
{
Contract.Requires(product != null);
}
后锐:自定义属性。
public void Buy([NotNull] Product product)
{
}
保护类:具有帮助程序方法的静态类。
public void Buy(Product product)
{
Guard.NotNull(product, "product"); // Repeat parameter name, bad for refactoring.
Guard.NotNull(() => product); // Slow
}
手册:
public void Buy(Product product)
{
if (product == null)
{
throw new ArgumentNullException("product");
}
}
否 对于最新版本的 roslyn,可以选择编写扩展以简化验证。对于 90%,我检查空引用或空字符串,因此拥有这样的东西可能是有价值的:
public void Buy(required Product product)
{
}
public void Buy(Product product)
{
requires product
}
public void FindUser(required nonempty string name)
{
requires nonempty name
}
所以我的问题:
- 是否有任何 roslyn 扩展或其他后编译器?
- 你知道有什么好的资源来编写这样的自定义扩展吗?
- 您是否会使用这样的扩展,如果是,首选语法是什么。如果没有,为什么?
您想引入新关键字,这不是扩展。这是一项语言功能。
我不是 100% 确定,但您必须修改语法,引入新的令牌和语法树节点。然后,必须指定应为该构造发出哪种类型的 IL。这不是一件小事。在那之后,你会得到你自己的 C# 版本,以及你自己的 C# 编译器版本。
它仅适用于使用此版本的编译器的人。
我认为这不是一个好主意。
我希望有一个
更好的代码契约版本,它需要更快地构建并提供更干净/更具表现力的语法。
您的建议似乎不是一个坏主意,因为已经提出了此功能:https://github.com/dotnet/roslyn/issues/119
我更喜欢声明中的语法,是的,我会使用它。