[英]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.