1. 程式人生 > >c# 如果一個對象的值為null,那麽它調用擴展方法時為甚麽不報錯

c# 如果一個對象的值為null,那麽它調用擴展方法時為甚麽不報錯

tro img 數據類型 一個 emp void person () rem

如果一個對象的值為null,那麽它調用擴展方法時會報錯嗎?

Person p = null ;
p.ExtendMethod();

上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去問了大牛。大牛解釋如下:

擴展函數其實只是為了讓代碼更具有可讀性, 但最終在clr中會翻譯成標準的靜態函數調用,

比如:  

public static void ExtMethod(this string str) 
{
    if(!string.IsNullOrEmpty(str))
    {
         //對str處理      
    }    
}

調用 "string".ExtMethod()最終會翻譯成ExtMethod("string"); 所以即使為null自然也不會報錯

null 為什麽點不出那個擴展函數?


  通過null獲取它自己的方法如下:

  技術分享圖片

  這樣試試 ((string)null).ExtMethod() 肯定能點出來

  技術分享圖片

  關鍵是使用擴展函數要看對應的數據類型。

c# 如果一個對象的值為null,那麽它調用擴展方法時為甚麽不報錯