为什么转换。ChangeType采取的一个对象参数?
-
27-09-2019 - |
题
的 Convert
类已经存在。净额为1.0。的 IConvertible
接口还存在,因为这段时间。
的 Convert.ChangeType
方法 只 工作对象的类型,实现 IConvertible
(事实上,除非我错了, 所有 的转换所提供的方法 Convert
类是这样)。那么,为什么参数类型 object
?
换句话说,不是这样的:
public object ChangeType(object value, Type conversionType);
为什么不签这个吗?
public object ChangeType(IConvertible value, Type conversionType);
只是似乎很奇怪我。
解决方案
看反射器你可以看到的顶部 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;
}
不隶属于 StackOverflow