【问题标题】:Does Convert.ChangeType call ToString() internally?Convert.ChangeType 在内部调用 ToString() 吗?
【发布时间】:2011-06-09 14:49:54
【问题描述】:

两者有什么区别:

value.ToString()

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

【问题讨论】:

标签: c# .net type-conversion


【解决方案1】:

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

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

因此,只需使用IFormatProvider 调用ToString,它就会做更多的工作。这一切都取决于实现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));
}

【讨论】:

    【解决方案2】:

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

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

    所以它与 value.ToString(); 完全不同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多