我有以下代码
class Program
{
static void Main()
{
Foo(new List<int>());
Foo(10.3);
Foo((IList<int>)new List<int>());
}
static void Foo<T>(IList<T> list)
{
Console.WriteLine("Foo'List: {0}", typeof(T));
}
static void Foo<T>(T item)
{
Console.WriteLine("Foo'T: {0}", typeof(T));
}
}
执行结果时
Foo'T: System.Collections.Generic.List`1[System.Int32]
Foo'T: System.Double
Foo'List: System.Int32
奇怪的是,即使Foo<T>(T)
实施了Foo<T>(IList<T>)
,第一次对List<T>
而非IList<T>
进行了调用。