参数.与罗斯林一起检查

本文关键字:检查 一起 罗斯林 参数 | 更新日期: 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
}

所以我的问题:

  1. 是否有任何 roslyn 扩展或其他后编译器?
  2. 你知道有什么好的资源来编写这样的自定义扩展吗?
  3. 您是否会使用这样的扩展,如果是,首选语法是什么。如果没有,为什么?

参数.与罗斯林一起检查

您想引入新关键字,这不是扩展。这是一项语言功能。

我不是 100% 确定,但您必须修改语法,引入新的令牌和语法树节点。然后,必须指定应为该构造发出哪种类型的 IL。这不是一件小事。在那之后,你会得到你自己的 C# 版本,以及你自己的 C# 编译器版本。

它仅适用于使用此版本的编译器的人。

我认为这不是一个好主意。

我希望有一个

更好的代码契约版本,它需要更快地构建并提供更干净/更具表现力的语法。

您的建议似乎不是一个坏主意,因为已经提出了此功能:https://github.com/dotnet/roslyn/issues/119

我更喜欢声明中的语法,是的,我会使用它。