Хорошо, поэтому я парень 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);
}
Как этот код может скомпилировать, не указав общий тип? Вызывает ли С# тип во время выполнения?