我已经尝试了很多方法来消除所有这些无聊的代码来检查参数:
当第三方库不支持Code-Contracts:时,您会感到不安。
public void Buy(Product product)
{
Contract.Requires(product != null);
}PostSharp:自定义属性。
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
}所以我的问题是:
发布于 2014-04-04 17:49:37
您想要引入新关键字,这不是一个扩展。这是语言特征。
我不是百分之百确定,但是您必须修改语法,引入新的令牌和语法树节点。然后,您必须指定应该为该构造释放什么样的IL。这可不是件小事。在此之后,您将得到您自己版本的C#,以及您自己版本的C#编译器。
它只适用于使用这个版本的编译器的人。
我认为那不是个好主意。
发布于 2015-02-09 20:00:19
我想要一个更好的代码契约版本,它需要更快的构建,并且提供一个更干净/更有表现力的语法。
您的建议似乎并不是一个坏主意,因为这个特性已经被提出了:https://github.com/dotnet/roslyn/issues/119
我更喜欢声明中的语法,是的,我会使用它。
https://stackoverflow.com/questions/22869259
复制相似问题