2

我对转换方法“.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);

该语句工作正常,但现在我想了解第一个和第二个语句之间的技术差异?

4

2 回答 2

4

Convert.ToString 方法(对象,IFormatProvider)

如果 value 参数实现了 IConvertible 接口,则该方法调用 value 的 IConvertible.ToString(IFormatProvider) 实现。否则,如果 value 参数实现了 IFormattable 接口,则该方法调用其 IFormattable.ToString(String, IFormatProvider) 实现。如果 value 没有实现任何接口,则该方法调用 value 参数的 ToString() 方法。

Nullable<int>视为标准int,并在调用格式提供程序IFormattable.ToString(String, IFormatProvider)时被触发。Convert.ToString

证明:

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

把断点放在里面GetFormat,当最后一个Main执行时它会被击中。

于 2013-03-01T07:32:33.527 回答
0

阅读 msdn http://msdn.microsoft.com/en-us/library/6t7dwaa5.aspx

返回值使用通用数字格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行格式化。

于 2013-03-01T07:36:50.177 回答