“Convert.ToString(Nullable <int>)”和“Nullable <int> .ToString()”之间的区别?</int> </int>

时间:2013-03-01 07:28:00

标签: c# type-conversion resharper tostring

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

这个说法很好但现在我想了解第一个和第二个语句之间的技术差异吗?

2 个答案:

答案 0 :(得分:4)

Convert.ToString Method (Object, IFormatProvider)

  

如果value参数实现IConvertible接口,则   方法调用IConvertible.ToString(IFormatProvider)实现   有价值的。否则,如果value参数实现了   IFormattable接口,该方法调用它   IFormattable.ToString(String,IFormatProvider)实现。如果   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的最后一个被执行时它将被击中。

答案 1 :(得分:0)

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

返回值的格式为通用数字格式说明符(“G”)和当前文化的NumberFormatInfo对象。