2017-06-22 143 views
0

我是C#的新手,我总是使用它,但不明白它在做什么。'“”''在C#中的“”+ ex'是什么意思?

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

    } 
    return "Name : " + result; 

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

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

+0

它会调用Exception的ToString方法并将其附加到空字符串中。 – NtFreX

+0

你能否澄清一下你的问题,以便它可以作为新的和独特的重新开放?感觉你已经知道''''是字符串常量,所以你应该把你的代码改写为[MCVE]:'string result =“”+ new Exception();'。你也阅读我已经链接为重复的答案的文档 - 所以你知道'string +'存在什么......不幸的是,在这一点上,我不明白需要其他信息(但我花了一些时间在C# - 所以太多的东西对我来说是显而易见的) –

+0

(我也编辑过“这与int'无关”,包含重复链接的句子 - 如果您需要说“不是重复“,否则如果问题重新打开,”不是int“在没有上下文的情况下看起来完全不合适)。 –

回答

3

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

所以基本上,而不是创建两个字符串和连接它们(导致创建第三个字符串),这将是更好的:

return ex?.ToString(); 

而且由于它是一个异常处理,你知道ex可以不会是空的,这也可以:

return ex.ToString(); 
+0

出于兴趣,在这种情况下什么时候'ex'会'null'?是否会到达捕捉现场? – Bathsheba

+1

不,但你知道,复制粘贴这段代码会阻止在NRE上多投一票。 –

+0

注意,以不可区分的方式返回成功和失败可能不是最好的编码实践...即使有良好的名称[字符串类型代码](https://blog.codinghorror.com/new-programming -行话/) –

5

引号只是表示字符串文字。在这里,"" + ex只是错误的代码 - 通过将ex与空字符串("")连接来创建字符串。它等效于:

return ex?.ToString(); 

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

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

为什么你的catch中的异常是空的?他不是懒惰,不想写字符串吗? –

+0

@ johnny5它不应该;我在谈论''“+ foo'的确切含义是什么,而不是异常的语义。 –

+0

你也可以把它写成'ex?.ToString()? “”'。 – Kyle

3

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

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