首先,对不起标题,但我想不出更好的...
我的问题可以通过简单的代码示例来呈现:
public static class Test<T>
{
public static int GetInt(T source)
{
return Convert.ToInt32(source);
}
}
public static class Convert
{
public static int ToInt32(byte source)
{
return 30;
}
public static int ToInt32(object source)
{
return 10;
}
}
为什么Console.WriteLine(Test<byte>.GetInt(20));
打印10
,而不是30
?
我一直认为 .NET 中的泛型是在运行时由 JIT 解决的。那么为什么 jitter 不够聪明,无法找出ToInt32(byte)
适合我们byte
这里参数类型的方法呢?
这种行为使Convert
静态类方法调用导致简单类型的装箱/拆箱操作。