c# – Parameter.Checking with Roslyn

c# – Parameter.Checking with Roslyn,第1张

概述我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数: 代码合同:当第三方库不支持时,您会感到紧张. public void Buy(Product product){ Contract.Requires(product != null);} PostSharp:自定义属性. public void Buy([NotNull] Product product){} Guard- 我已经尝试了很多东西来摆脱所有这些无聊的代码来检查参数:

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

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

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

我不认为这是个好主意.

总结

以上是内存溢出为你收集整理的c# – Parameter.Checking with Roslyn全部内容,希望文章能够帮你解决c# – Parameter.Checking with Roslyn所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存