请考虑以下代码:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
正如所料,将调用非泛型的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";
}
}
Run Code Online (Sandbox Code Playgroud)
我唯一改变的是将T类型参数添加到第二个重载,从而使其成为通用的.请注意,不使用type参数.
该修改导致调用第一个DoSomething方法.为什么?编译器具有所需的所有信息,以便选择第二种方法.
你能解释为什么,甚至更好地指出我解释这种行为的C#规范部分?