“Convert.ToString(Nullable )”和“Nullable .ToString()”之间的区别?
我有一个关于转换方法“.ToString()”的一般问题。 起初,我用这个语句转换:“Convert.ToString(Nullable <int>)”和“Nullable <int> .ToString()”之间的区别?
Nullable<int> SomeProperty;
string test = SomeProperty.ToString();
到这里是没有问题的,但之后,我想“CultureInfo.InvariantCulture”添加到ToString()方法。它不起作用,因为Nullable的.ToString()没有参数。为什么Resharper建议将CultureInfo信息插入我?
之后,我尝试了另一种方式,并使用此声明:
Nullable<int> SomeProperty;
string test = Convert.ToString(SomeProperty, CultureInfo.InvariantCulture);
此语句工作正常,但现在我想明白了第一和第二条语句之间的差异的技术?
Convert.ToString Method (Object, IFormatProvider):
如果该值参数实现IConvertible接口,所述 方法调用的值的IConvertible.ToString(的IFormatProvider)实现 。否则,如果value参数实现了IFormattable接口,则该方法将调用其IFormattable.ToString(String,IFormatProvider)实现的 。如果 值没有实现接口,则该方法调用参数的ToString()方法的值 。
Nullable<int>
是看到像标准int
,而当Convert.ToString
与格式提供被称为IFormattable.ToString(String, IFormatProvider)
被激发。
证明:内GetFormat
class MyFormatProvider : IFormatProvider
{
public object GetFormat(Type formatType)
{
return "G";
}
}
static void Main(string[] args)
{
Nullable<int> SomeProperty = 1000000;
Console.WriteLine(SomeProperty.ToString());
Console.WriteLine(Convert.ToString(SomeProperty));
Console.WriteLine(Convert.ToString(SomeProperty, new MyFormatProvider()));
}
认沽断点,它会被执行Main
最后一个时被打。
读MSDN http://msdn.microsoft.com/en-us/library/6t7dwaa5.aspx
返回值被格式化通用数值格式说明(“G”)和当前区域性的NumberFormatInfo对象。
['int'实现'IFormattable'](http://msdn.microsoft.com/en-us/library/system.int32.aspx),所以这是错误的,这不会调用'ToString( )',这将会调用'ToString(IFormatProvider)'。 – hvd 2013-03-01 07:38:17
但它不是关于'int',它关于'可空的' –
MarcinJuraszek
2013-03-01 07:38:47
盒装的'可空'是一个盒装的'int'。 'Convert.ToString'不能说它最初来自可空类型。 –
hvd
2013-03-01 07:39:16