2

変換メソッド「.ToString()」について一般的な質問があります。最初に、変換に次のステートメントを使用します。

Nullable<int> SomeProperty;
string test = SomeProperty.ToString();

ここまでは問題ありませんが、あとは ToString() メソッドに「CultureInfo.InvariantCulture」を追加したいです。Nullable の .ToString() にはパラメーターがないため、機能しません。Resharper が CultureInfo 情報を挿入するよう提案するのはなぜですか??

その後、別の方法を試して、次のステートメントを使用します。

Nullable<int> SomeProperty;
string test = Convert.ToString(SomeProperty, CultureInfo.InvariantCulture);

このステートメントは正常に機能しますが、最初のステートメントと 2 番目のステートメントの技術的な違いを理解したいですか??

4

2 に答える 2

4

Convert.ToString メソッド (オブジェクト、IFormatProvider) :

value パラメータが IConvertible インターフェイスを実装している場合、メソッドは value の IConvertible.ToString(IFormatProvider) 実装を呼び出します。それ以外の場合、value パラメーターが IFormattable インターフェイスを実装している場合、メソッドはその IFormattable.ToString(String, IFormatProvider) 実装を呼び出します。value がどちらのインターフェイスも実装しない場合、メソッドは value パラメータの ToString() メソッドを呼び出します。

Nullable<int>はstandardのように見え、 with format provider が呼び出されたときに起動されます。intIFormattable.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 に答える