从ASP.NET MVC的源代码中考虑this code:
public static IApplicationBuilder UseMvc(
[NotNull] this IApplicationBuilder app,
[NotNull] Action<IRouteBuilder> configureRoutes) {...}
根据this回答,带注释的参数不能为空。那为什么我可以将null传递给方法呢?也就是说,在下面的例子中,为什么编译器没有给我任何错误?
app.UseMvc(null);
答案 0 :(得分:29)
可能导致编译器生成错误的唯一属性是ObsoleteAttribute
。这是因为该属性的行为被硬编码到编译器中。
NotNull
属性之类的属性通常用于在编写代码时生成警告或错误的工具(如ReSharper)。请阅读此特定属性here。
您还可以使用PostSharp等工具issue additional build-time errors。
答案 1 :(得分:10)
如果您希望将Null检查移动到方面,而不需要手动完成。明确的解决方案是使用Fody开源构建编织器。具体而言,您希望利用NullGuard Fody
PM&GT;安装包NullGuard.Fody
应该是设置为使用带有零防护的Fody所需的一切。文档显示了如果您愿意,您可以如何控制细粒度。