c# – Parameter.Checking with Roslyn

我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数:

代码合同:当第三方库不支持时,您会感到紧张.

public void Buy(Product product)
{
     Contract.Requires(product != null);
}

PostSharp:自定义属性.

public void Buy([NotNull] Product product)
{
}

Guard-Class:带有辅助方法的静态类.

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#编译器版本.

它只适用于使用此版本编译器的人.

我不认为这是个好主意.

相关文章
相关标签/搜索