2017-06-22 76 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();可能不那麼鈍。