看反射器,你可以看到 的顶部ChangeType(object, Type, IFormatProvider)
,这就是所谓的封面:
public static object ChangeType(object value, Type conversionType, IFormatProvider provider)
{
//a few null checks...
IConvertible convertible = value as IConvertible;
if (convertible == null)
{
if (value.GetType() != conversionType)
{
throw new InvalidCastException(Environment.GetResourceString("InvalidCast_IConvertible"));
}
return value;
}
所以它看起来像一个没有实现IConvertible
但已经是目标类型的类型的对象只会返回原始对象。
当然,看起来这是需要实现的值的唯一IConvertible
例外,但它是一个例外,并且看起来像是参数的原因object
。
这是针对这种情况的快速 LinqPad 测试:
void Main()
{
var t = new Test();
var u = Convert.ChangeType(t, typeof(Test));
(u is IConvertible).Dump(); //false, for demonstration only
u.Dump(); //dump of a value Test object
}
public class Test {
public string Bob;
}