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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top