好的,所以我是一个开始使用 C# 的 Java 人,我正在编码并开始制作一个泛型方法,我写的东西可以运行和编译,但这与我所知道的关于泛型应该如何工作的一切背道而驰,所以我希望有人能解释一下对我来说:
所以我有一个通用方法定义如下:
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# 是否在运行时推断类型?