簡體   English   中英

Convert.ChangeType 在內部調用 ToString() 嗎?

[英]Does Convert.ChangeType call ToString() internally?

有什么區別:

value.ToString()

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

它在確保類型為IConvertable.ToString后調用IConvertable

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();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM