Consider the following code:
public class Tests
{
public void Test()
{
Assert.AreEqual("Int", DoSomething(1));
}
public static string DoSomething<T>(T value)
{
return "Generic";
}
public static string DoSomething(int value)
{
return "Int";
}
}
正如预期的那样,将调用非泛型的DoSomething方法。现在考虑以下修改:
public class Tests
{
public void Test()
{
Assert.AreEqual("Int", DoSomething(1));
}
public static string DoSomething<T>(T value)
{
return "Generic";
}
public static string DoSomething<T>(int value)
{
return "Int";
}
}
我唯一修改的是将T类型参数添加到第二个重载方法中,从而使其成为泛型。请注意,类型参数未被使用。
这个修改导致了第一个DoSomething方法被调用。为什么?编译器有足够的信息来选择第二个方法。
您能否解释这种行为的原因,甚至更好的是,指向解释这种行为的C#规范的部分?