好了,所以我是一個Java的人開始使用C#和我的編碼,並開始做一個通用的方法和我寫的運行和編譯,但它違揹我知道泛型應該如何工作的一切所以我希望有人可以給我講解一下:C#泛型方法不指定類型
所以我有一個通用的方法定義如下:
public static List<T> CopyAsList<T>(IEnumerable<T> list, Object lockObject)
{
if (list != null)
{
lock (lockObject)
{
return new List<T>(list);
}
}
return null;
}
但奇怪的事情對我來說,我可以把這個泛型方法而沒有指定T
,它會工作:
List<String> strings = new List<string>() { "a", "b", "c"};
List<int> ints = new List<int>() { 1,2,3};
object lockObject = new object();
foreach (string s in CopyAsList(strings, lockObject))
{
Console.WriteLine(s);
}
foreach (int i in CopyAsList(ints, lockObject))
{
Console.WriteLine(i);
}
它是如何的代碼能而沒有指定泛型類型編譯? C#在運行時推斷類型嗎?
在運行時沒有C#了。 – Gabe
C#編譯器在編譯時推斷類型。注意,CLR(DLR)可以在運行時推斷出類型,請參閱C#中的'dynamic'關鍵字。 – kizzx2
kizzx2:OP用'.net-3.5'標記了問題,它從上下文中消除了'dynamic',並且在運行時沒有類型推理--DLR使用反射來確定類型。 – Gabe