2012-07-12 122 views
-6

我試圖用這個聲明精簡if語句C#

status_label.Text = err.Message + " || " + err.InnerException == null ? " " : err.InnerException.Message; 

基本上,如果存在的InnerException,因爲它不爲空,則顯示它,如果它爲null,則不會輸出任何東西。

,我想我可以把它

status_label.Text = err.Message; 
if (err.InnerException != null) 
    status_label.Text += " || " + err.InnerException.Message; 

歡呼聲,這是流線型。

+6

和你的問題是? – 2012-07-12 14:31:20

+0

似乎沒有問題。 – 2012-07-12 14:32:33

+0

我沒有看到重構代碼的巨大好處。你的連接應該變成string.Format(),因爲字符串在.Net中是不變的(見J託雷斯的帖子)。 – 2012-07-12 14:38:23

回答

3

用這個代替:

status_label.Text = err.InnerException == null 
    ? err.Message 
    : err.Message + " || " + err.InnerException.Message; 
+0

感謝@NominSim的編輯。 – 2012-07-12 14:36:18

+0

當InnerException不爲null時,它不包含「||」。 – 2012-07-12 14:39:27

+0

@JTorres,它現在包括它。 – 2012-07-12 14:42:05

0

這應該做的伎倆:

status_label.Text = string.Format("{0}{1}", err.Message, err.InnerException != null ? string.Format(" || {0}", err.InnerException.Message) : string.Empty); 
+0

+1:哈。我正在輸入這個「完全」答案。 – 2012-07-12 14:36:05

+0

我不知道爲什麼有人低估了這個... – 2012-07-12 14:40:55

+4

仇恨者會討厭... – 2012-07-12 14:43:25

1

你缺少周圍的三元運算符的brakets

status_label.Text = err.Message + " || " + (err.InnerException == null ? " " : err.InnerException.Message); 

,或者,如果你不我想要||在空的InnerException的情況下

status_label.Text = err.Message + (err.InnerException == null ? "" : " || " + err.InnerException.Message); 
+0

這將包含「||」,即使InnerException爲null。 – 2012-07-12 14:39:02

0

首先,你的if語句應該是這樣的

status_label.Text = err.Message; 
if (err.InnerException != null) 
    status_label.Text += " || " + err.InnerException.Message; 

至於使它比這更簡化,可以讓使用條件和/或空合併的,但是完全可讀的。

但是,如果您願意,您可以這樣做。

status_label.Text = string.Concat(err.Message, err.InnerException == null ? string.Empty : " || " + err.InnerException.Message); 

這是否更簡潔?不是真的。

0

只是一個想法,如果你不介意的全部異常被打印,你可以這樣做:

status_label.Text = err.ToString(); 
status_label.Text += err.InnerException; 

(請記住這將提出一個「系統異常:」等等在每個前例外。)

否則你的代碼看起來已經夠精簡了。 (可讀性有時比緊湊性更值得記住。)