Ok so I'm a Java guy starting to use C# and I was coding and started making a generic method and what I wrote runs and compiles but it goes against everything I know about how generics should work so I'm hoping someone can explain this to me:
So I have a generic method defined as follows:
public static List<T> CopyAsList<T>(IEnumerable<T> list, Object lockObject)
{
if (list != null)
{
lock (lockObject)
{
return new List<T>(list);
}
}
return null;
}
But the weird thing to me is that I can call this generic method without ever specifying T
and it will work:
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);
}
How is it the code is able to compile without ever specifying the generic type? Does C# infer the type at runtime?
dynamic
keyword from C#. – Deist.net-3.5
which eliminatesdynamic
from the context, and at runtime there is no type inferencing -- the DLR uses reflection to determine types. – Convexity