提问人:Stadub Dima 提问时间:2/18/2019 最后编辑:Stadub Dima 更新时间:2/19/2019 访问量:554
dot net core 如何处理 Arg.NotNull 和 Contract.Requires 资产
How does dot net core process Arg.NotNull and Contract.Requires assets
问:
在aspnet-api-versioning中,我发现了一个代码块:
DefaultApiControllerFilter( IEnumerable<IApiControllerSpecification> pecifications )
{
Arg.NotNull( specifications, nameof( specifications ) );
this.specifications = specifications.ToArray();
}
感兴趣的块来自命名空间。Arg.NotNull( value, "text" );
Microsoft
代码中有几个类似的断言。另一个例子是来自Contract.Requires()
System.Diagnostics.Contracts
尝试搜索有关工作原则的 Microsoft 文档,但没有找到信息。
因此,也许可以帮助找出它是如何工作的:例如postsharp代码重写,提供运行时条件检查,或者只是抛出异常(但它没有在文档中提及)?Debug.Assert
答:
它们是代码协定(参见 https://learn.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts 和 https://www.microsoft.com/en-us/research/project/code-contracts/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fcontracts%2Fuserdoc.pdf)
不幸的是,他们并没有真正起飞,这个项目有点被放弃了,这是一种耻辱,因为他们有潜力。
评论
abandoned
下载库源码后,编译并查看编译后的代码,发现只是一个带有方法的共享代码项目Microsoft::Arg
internal static void NotNull<T>(T value, string name) where T : class
{
if ((object) value == null) throw new ArgumentNullException(name);
}
并且是一个代码协定断言代码生成扩展,它...不会生成任何缺少断言后生成事件的代码。stackowerflow 上的类似提示。Contract.Requires(condition)
评论
下一个:如何在C#中启用合同?
评论