【问题标题】:Converting Doubles to strings [closed]将双精度数转换为字符串 [关闭]
【发布时间】:2013-03-12 19:56:12
【问题描述】:

当我在下面的方法中删除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
    }
}

【问题讨论】:

  • mNumber1mNumber2的数据类型是什么?你在说什么错误?更具体。
  • 谁或什么说有必要?
  • 如果您要显示 Number2 和 mNumber2 的定义数据类型,如果它们已经是字符串,那么您不需要 .ToString()
  • 你提供了令人信服的证据表明没有必要,所以我不明白你为什么要问这个问题。
  • 所以您要求我们告诉您为什么您认为有必要进行转换?

标签: c# string


【解决方案1】:

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

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

换句话说,+ 操作数将为您进行 ToString 转换。

【讨论】:

  • ' return mNumber1.ToString() + "+";'作品。 '返回 mNumber1.ToString() + "+" + mNumber2.ToString();'有效,'返回 mNumber1;'错误:无法将双精度类型隐式转换为字符串
【解决方案2】:

那为什么有必要呢?

没必要。

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

【讨论】:

  • 实际上,如果mNumber1是一个引用类型,如果mNumber1null,那么mNumber1.ToString() + "/"会因为显式.ToString()而抛出异常,而mNumber1 + "/"会不要抛出(“总和”只是"/")。但如果mNumber1 是值类型(根据上下文会认为),则此注释无关紧要。
【解决方案3】:

doublestring 连接在一起会为您转换它。

否则你可以用.ToString()转换它

或者使用 Convert.ToString(double) 方法。 http://msdn.microsoft.com/en-us/library/c309e6c9.aspx

【讨论】:

  • 所以我这里真的不需要 ToString() 方法,谢谢
【解决方案4】:

这是因为您已经与字符串(“+”、“-”等)连接,这意味着表达式的其余部分被解析为字符串类型。如果你没有连接这些额外的字符串,那么你需要调用ToString()

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多