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

aba*_*hev 1 .net c# boolean-logic conditional-operator

返回this.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;
Run Code Online (Sandbox Code Playgroud)

或以示意图形式:

                     |
                    any
              /            \
      specified             isClient
      /        \           /        \
  isClient    empty     textbox  dropdown
  /       \
textbox  dropdown
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*son 11

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


dtb*_*dtb 6

您可以将表达式简化为:

if (any && !specified)
{
    return empty;
}
else
{
    return isClient ? textbox : dropdown;
}
Run Code Online (Sandbox Code Playgroud)


And*_*rey 5

any && !specified ? 
   empty : 
   isClient ? textbox : dropdown;  
Run Code Online (Sandbox Code Playgroud)