Convert.ChangeType在内部调用ToString()吗?

时间:2011-06-09 14:49:54

标签: c# .net type-conversion

之间有什么区别:

value.ToString()

(string)Convert.ChangeType(value, typeof(string))

2 个答案:

答案 0 :(得分:3)

在确保类型为IConvertable.ToString之后调用IConvertable

case TypeCode.String:
   return (object) convertible.ToString(provider);

因此,只需使用ToString拨打IFormatProvider,就可以完成更多工作。它将全部依赖于实现IConvertable的类型的实现。

provider来自(IFormatProvider) Thread.CurrentThread.CurrentCulture

这是int的作用。

public override string ToString()
{
  return Number.FormatInt32(this, (string) null, NumberFormatInfo.CurrentInfo);
}

public string ToString(string format)
{
  return Number.FormatInt32(this, format, NumberFormatInfo.CurrentInfo);
}

public string ToString(IFormatProvider provider)
{
  return Number.FormatInt32(this, (string) null, NumberFormatInfo.GetInstance(provider));
}

public string ToString(string format, IFormatProvider provider)
{
  return Number.FormatInt32(this, format, NumberFormatInfo.GetInstance(provider));
}

答案 1 :(得分:1)

当目标类型为字符串时,Convert.ChangeType的工作方式如下:


if (value == null)
{
    return null;
}

var convertible = value as IConvertible;
if (convertible == null)
{
    throw new InvalidCastException();
}

return convertible.ToString();

所以它与value.ToString();

完全不同