【问题标题】:what does ' "" ' mean in ' "" + ex ' in C#? [duplicate]在 C# 中的 ' "" + ex ' 中的 ' "" ' 是什么意思? [复制]
【发布时间】:2017-11-25 22:21:03
【问题描述】:

我是 C# 新手,我总是使用它,但不明白它在做什么。

catch (Exception ex)
    {
        return "" + ex;

    }
    return "Name : " + result;

当我将鼠标悬停在它上面时,它会显示“将文本表示为一系列 Unicode 字符”。我知道这与代码的最后一行有关,但为什么之前是'""'。

我见过string = string + int: What's behind the scenes? 谈到了"" + 1(或一般的“字符串+对象”)的类似情况。就我而言,ex 显然不是int,所以这不是那个问题的重复。

【问题讨论】:

  • 它将调用ExceptionToString方法并将其附加到空字符串中。
  • 您能否澄清您的问题,以便将其重新打开为新的和独特的?感觉你已经知道""是字符串常量,所以你的代码应该改写为minimal reproducible examplestring result = "" + new Exception();。您还阅读了我作为重复链接的答案中的文档-所以您知道string + 存在什么...不幸的是,此时我不明白还需要哪些其他信息(但我在 C# 中花了一些时间-也是如此很多事情对我来说是显而易见的)
  • (我还将“这与int 无关”编辑成包含重复链接的句子 - 如果您需要说“不是重复的”,请尝试在以后进行类似的编辑”。否则,如果重新打开问题,“不是 int”在没有上下文的情况下看起来完全不合适)。

标签: c#


【解决方案1】:

引号仅表示字符串文字。在这里,"" + ex 只是一个糟糕的代码——它通过将ex 与空字符串 ("") 连接来创建一个字符串。相当于:

return ex?.ToString();

即使ex 为空,它也会返回""...所以也许:

return ex == null ? "" : ex.ToString();

【讨论】:

  • 为什么你在 catch 中的异常会为空?他不是只是懒惰不想写字符串吗?
  • @johnny5 不应该;我说的是"" + foo的确切含义,而不是异常的语义。
  • 也可以写成ex?.ToString() ?? ""
  • @Kyle 你可以;我有点假设有人问"" + ex 是什么意思也会被?.?? 混淆
【解决方案2】:

"" 是一个空字符串。 "" + ex 是一种反模式,强制将ex 转换为字符串,给出异常消息。

所以基本上,与其创建两个字符串并将它们连接起来(导致创建第三个字符串),这会更好:

return ex?.ToString();

因为它是一个异常处理程序,而且你知道ex 不能为空,这也可以:

return ex.ToString();

【讨论】:

  • 出于兴趣,ex 在这种情况下何时会成为null?那会到达捕获地点吗?
  • 不,但您知道,复制粘贴此代码将防止在 NRE 上再次出现重复投票。
  • 请注意,以难以区分的方式返回成功和失败可能也不是最佳编码实践......即使有好名字stringly typed code
【解决方案3】:

这是 C# 和 Java 等语言的惯用语。使用任何字符串字面量作为前缀("" 具有最良性的效果)会将二进制加法运算符 + 置于一种串联的“字符串模式”中,因此会强制在异常对象上调用 ToString

真的很可爱,虽然return ex.ToString(); 可能不那么钝。

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2011-06-10
    • 2014-02-02
    • 2014-06-25
    相关资源
    最近更新 更多