2015-09-27 14 views
10

考慮從ASP.NET MVC的源代碼this code使用[NOTNULL對於一個方法的參數

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

this答案,註釋的參數不能爲空。那麼爲什麼我可以將null傳遞給方法?也就是說,在下面的情況下,編譯器爲什麼不給我任何錯誤?

app.UseMvc(null); 
+2

相關:[NotNull屬性](http://stackoverflow.com/q/30896853/464709)。 –

回答

15

可能導致編譯器生成錯誤的唯一屬性是ObsoleteAttribute。這是因爲該屬性的行爲被硬編碼到編譯器中。

屬性(如NotNull屬性)通常用於在編寫代碼時生成警告或錯誤的工具(如ReSharper)。請閱讀關於此特定屬性here

您還可以使用PostSharp等工具來issue additional build-time errors

+4

鏈接https://github.com/aspnet/Home/wiki/Engineering-guidelines#argument-null-checking不談[NotNull] – ympostor

7

如果您希望移動Null檢查由方面實現而不需要手動完成。明確的解決方案是使用Fody開源構建編織器。特別是要充分利用NullGuard Fody

PM>安裝,包裝NullGuard.Fody

應要求獲得設置爲使用Fody與空衛士一切。該文件顯示瞭如果您願意,您可以擁有精細的糧食控制。

相關問題