Convert.ChangeType是否在内部调用ToString()

本文关键字:ToString 调用 在内部 ChangeType 是否 Convert | 更新日期: 2023-09-27 17:58:42

之间有什么区别吗

value.ToString()

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

Convert.ChangeType是否在内部调用ToString()

它在确保类型为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));
}

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


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

因此,它与价值有很大不同。ToString();