2014-10-01 129 views
0

我有一個函數,它採用泛型類型參數。這很簡單:爲什麼我不需要在C#中指定類型參數?

private static void Run<T>(IList<T> arg) 
{ 
    foreach (var item in arg) 
    { 
     Console.WriteLine(item); 
    } 
} 

我發現我可以調用這個函數沒有指定類型參數:

static void Main(string[] args) 
{ 
    var list = new List<int> { 1, 2, 3, 4, 5 }; 

    //both of the following calls do the same thing 
    Run(list); 
    Run<int>(list); 

    Console.ReadLine(); 
} 

這編譯和運行就好了。爲什麼這個工作沒有指定類型參數?代碼如何知道T是一個int?有沒有這個名字?

+0

這是因爲編譯器推斷從你傳遞的列表類型 – 2014-10-01 17:25:18

回答

3

接受的答案是正確的。欲瞭解更多的背景信息,這裏有一些資源給你:

我的視頻解釋的類型推斷的是如何改變C#3.0:

http://ericlippert.com/2006/11/17/a-face-made-for-email-part-three/

我們怎麼知道該類型推理過程不會去進入無限循環?

http://ericlippert.com/2012/10/02/how-do-we-ensure-that-method-type-inference-terminates/

爲什麼不限制類型推斷的過程中考慮?特別閱讀評論。

http://blogs.msdn.com/b/ericlippert/archive/2009/12/10/constraints-are-not-part-of-the-signature.aspx

相關問題