2010-04-27 44 views
1

返回this.AllowChooseAny.Value? radioSpecific.Checked? UserManager.CurrentUser.IsClient? txtSubject.Text:subjectDropDownList.SelectedItem.Text: String.Empty: UserManager.CurrentUser.IsClient? txtSubject.Text:subjectDropDownList.SelectedItem.Text;優化條件運算符在C#中的分支

或較不復雜的形式:

return any ? 
    specified ? 
     isClient ? textbox : dropdown : 
     empty : 
    isClient ? textbox : dropdown; 

或以示意的形式:

     | 
        any 
      /   \ 
     specified    isClient 
    /  \   /  \ 
    isClient empty  textbox dropdown 
/  \ 
textbox dropdown 

顯然我有兩個不同的電平的複製塊。是否有可能優化此代碼可能會將它們拆分爲一個?或者類似的東西..

+14

我要殺了我的眼睛,用叉子,如果我曾經就遇到了這個..... – 2010-04-27 18:52:38

+0

我喜歡ReSharper的,但它肯定看起來像一個人有點兒太高興與回報有取代!你的評論@Matt讓我在工作中大笑。 – 2010-04-27 19:13:49

回答

5
any && !specified ? 
    empty : 
    isClient ? textbox : dropdown; 
6

您可以簡化表達這樣的:

if (any && !specified) 
{ 
    return empty; 
} 
else 
{ 
    return isClient ? textbox : dropdown; 
} 
+0

+1可讀性 – 2010-04-27 22:06:14

11

代碼塊幾乎是不可讀。不要僅僅爲了三元運算符而使用三元運算符;它可以通過消除if塊來獲得非常簡單的表達式,使更具可讀性。你有什麼不是。

+0

+1來補償。 :-) – 2010-04-27 19:02:10

+0

雖然我同意你的意見,但你沒有回答這個問題。 – Andrey 2010-04-27 19:17:41

+0

可讀代碼是一種優化形式 – RvdK 2010-04-29 09:04:00

0

isClient ? textbox : dropdown塊放入方法中,並從您原始分支調用方法調用=不再執行代碼重複。