2013-03-01 180 views
2

我有一個關於轉換方法「.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); 

此語句工作正常,但現在我想明白了第一和第二條語句之間的差異的技術?

回答

4

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最後一個時被打。

+1

['int'實現'IFormattable'](http://msdn.microsoft.com/en-us/library/system.int32.aspx),所以這是錯誤的,這不會調用'ToString( )',這將會調用'ToString(IFormatProvider)'。 – hvd 2013-03-01 07:38:17

+0

但它不是關於'int',它關於'可空的' – MarcinJuraszek 2013-03-01 07:38:47

+0

盒裝的'可空'是一個盒裝的'int'。 'Convert.ToString'不能說它最初來自可空類型。 – hvd 2013-03-01 07:39:16

相關問題