如果一個對象的值為null,那麼它調用擴展方法時會報錯嗎? 上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去問了大牛。大牛解釋如下: 擴展函數其實只是為了讓代碼更具有可讀性, 但最終在clr中會翻譯成標準的靜態函數調用, 比如: 調用 "string".ExtMethod()最終會翻譯成 ...
如果一個對象的值為null,那麼它調用擴展方法時會報錯嗎?
Person p = null ; p.ExtendMethod();
上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去問了大牛。大牛解釋如下:
擴展函數其實只是為了讓代碼更具有可讀性, 但最終在clr中會翻譯成標準的靜態函數調用,
比如:
public static void ExtMethod(this string str) { }
調用 "string".ExtMethod()最終會翻譯成ExtMethod("string"); 所以即使為null自然也不會報錯
null 為什麼點不出那個擴展函數?
通過null獲取它自己的方法如下:
這樣試試 ((string)null).ExtMethod() 肯定能點出來
關鍵是使用擴展函數要看對應的數據類型。