将双打转换为字符串

Rif*_*fki 0 c# string

当我删除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
    }
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*ger 7

从C#语言规范1.2,§7.7.4,加法运算符:

字符串连接:当一个或两个操作数的类型为字符串时,binary +运算符执行字符串连接.如果字符串连接的操作数为null,则替换空字符串.否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示形式.如果ToString返回null,则替换空字符串.[...]如果没有足够的可用内存来分配结果字符串,则可能抛出System.OutOfMemoryException.

换句话说,+操作数将为您执行ToString转换.


Ser*_*rvy 6

那为什么有必要呢?

这不是必需的.

有些人可能会主观地认为包含它更具可读性,但省略它不仅不会导致任何错误,而且还会产生完全相同的输出.省略ToString呼叫没有功能上的变化.

  • 实际上,如果`mNumber1`是一个引用类型,并且`mNumber1`是`null`,那么`mNumber1.ToString()+"/"`会抛出异常,因为显式的`.ToString()`,而` mNumber1 +"/"`不会抛出("sum"只是""/"`).但是如果`mNumber1`是一个值类型(根据上下文会想到的那个),这个注释是无关紧要的. (2认同)