0

以下の方法でを削除するToString()と、エラーは発生しませんが、なぜ必要なのですか?

public string BuildEquation()
{
    switch (Choice)
    {
        case "A":
            return mNumber1.ToString() + "+" + mNumber2.ToString();
        case "S":
            return mNumber1.ToString() + "-" + mNumber2.ToString();
        case "M":
            return mNumber1.ToString() + "*" + mNumber2.ToString();
        default:
            return mNumber1.ToString() + "/" + mNumber2.ToString(); // corrected
    }
}
4

4 に答える 4

7

C# 言語仕様 1.2、§7.7.4、加算演算子から:

文字列連結: 2 項 + 演算子は、一方または両方のオペランドが文字列型の場合に文字列連結を実行します。文字列連結のオペランドが null の場合、空の文字列が代入されます。それ以外の場合、非文字列引数は、型オブジェクトから継承された仮想 ToString メソッドを呼び出すことによって文字列表現に変換されます。ToString が null を返す場合、空の文字列が代用されます。[...] 結果の文字列を割り当てるのに十分なメモリがない場合、System.OutOfMemoryException がスローされることがあります。

つまり、+ オペランドは ToString 変換を行います。

于 2013-03-12T20:02:16.320 に答える
6

では、なぜそれが必要なのですか?

それは必要はありません。

含めた方が読みやすいと主観的に考える人もいますが、省略してもエラーが発生しないだけでなく、まったく同じ出力が生成されます。ToString呼び出しを省略しても機能的な変更はありません。

于 2013-03-12T20:01:05.660 に答える
0

これは、既に文字列 (「+」、「-」など) と連結しているためです。これは、式の残りの部分が文字列型に解決されることを意味します。これらの余分な文字列を連結しなかった場合は、 を呼び出す必要がありますToString()

于 2013-03-12T20:02:02.140 に答える
0

連結doubleしてstring一緒に変換すると、自動的に変換されます。

それ以外の場合は、次のように変換できます.ToString()

または Convert.ToString(double) メソッドを使用します。http://msdn.microsoft.com/en-us/library/c309e6c9.aspx

于 2013-03-12T20:02:58.927 に答える