优化C#中的条件运算符分支

时间:2010-04-27 18:50:15

标签: c# .net boolean-logic conditional-operator

返回此.AllowChooseAny.Value?            radioSpecific.Checked?               UserManager.CurrentUser.IsClient? txtSubject.Text:subjectDropDownList.SelectedItem.Text:               String.Empty:            UserManager.CurrentUser.IsClient? txtSubject.Text:subjectDropDownList.SelectedItem.Text;

或以不太复杂的形式:

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

或以示意图形式:

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

显然我在两个不同的级别上有一个重复的块。是否可以优化此代码以将它们分成一个?或类似的东西..

4 个答案:

答案 0 :(得分:11)

这段代码几乎不可读。不要仅仅为了三元运算符而使用三元运算符;通过消除非常简单表达式的if块,可以使得更多可读。你拥有的不是。

答案 1 :(得分:6)

您可以将表达式简化为:

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

答案 2 :(得分:5)

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

答案 3 :(得分:0)

isClient ? textbox : dropdown块放在方法中并从原始分支进行方法调用=不再需要代码重复。