【发布时间】:2011-06-09 14:49:54
【问题描述】:
两者有什么区别:
value.ToString()
和
(string)Convert.ChangeType(value, typeof(string))
【问题讨论】:
-
下载 dotPeek 以备将来参考。 jetbrains.com/decompiler
标签: c# .net type-conversion
两者有什么区别:
value.ToString()
和
(string)Convert.ChangeType(value, typeof(string))
【问题讨论】:
标签: c# .net type-conversion
在确保类型为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();
所以它与 value.ToString(); 完全不同
【讨论】: