2016-09-27 58 views
1

簡單代碼:奇怪的動態類型參數的問題

class Program 
{ 
    static void Main(string[] args) 
    { 
     dynamic income = "test"; 
     var result = Test(income); // Why dynamic? 
     Test2(result); // WTF? 
    } 

    static string Test(string income) 
    { 
     return income; 
    } 

    static string Test2(int income) 
    { 
     return income.ToString(); 
    } 
} 

上面的代碼編譯沒有錯誤,並在運行時異常執行:An unhandled exception of type Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll

任何人都可以解釋爲什麼result被確定爲dynamic類型?

回答

10

當您將dynamic值傳遞給表達式時,該整個表達式將變爲dynamic

動態的關鍵在於關閉所有類型檢查;編譯器將始終假定dynamic,即使代碼顯然是錯誤的。

+0

它是否記錄在任何地方? –

+0

這是'dynamic'核心行爲的一部分;看看它的文檔。 – SLaks