加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Parameter.Checking with Roslyn

发布时间:2020-12-15 23:43:20 所属栏目:百科 来源:网络整理
导读:我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数: 代码合同:当第三方库不支持时,您会感到紧张. public void Buy(Product product){ Contract.Requires(product != null);} PostSharp:自定义属性. public void Buy([NotNull] Product product){}
我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数:

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

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

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

我不认为这是个好主意.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读