Хорошо, так что я парень из Java, начинающий использовать 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 # тип во время выполнения?