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#编译器版本. 它只适用于使用此版本编译器的人. 我不认为这是个好主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |