使用作为方法的参数

从ASP.NET MVC的源代码中考虑以下代码:

public static IApplicationBuilder UseMvc( [NotNull] this IApplicationBuilder app, [NotNull] Action configureRoutes) {...} 

根据这个答案,带注释的参数不能为空。 那为什么我可以将null传递给方法? 也就是说,在下面的例子中,为什么编译器没有给我任何错误?

 app.UseMvc(null); 

可能导致编译器生成错误的唯一属性是ObsoleteAttribute 。 这是因为该属性的行为被硬编码到编译器中。

NotNull属性这样的属性通常意味着工具(如ReSharper)在编写代码时生成警告或错误。 请在此处阅读此特定属性。

您还可以使用PostSharp等工具发出其他构建时错误 。

如果您希望将Null检查移动到方面,而不需要手动完成。 明确的解决方案是使用Fody开源构建编织器。 具体来说,您想要利用NullGuard Fody

PM>安装包NullGuard.Fody

应该是设置为使用带有零防护的Fody所需的一切。 文档显示了如果您愿意,您可以如何进行细粒度控制。