Оптимизация ветвления условных операторов в C # - PullRequest
1 голос
/ 27 апреля 2010

вернуть this.AllowChooseAny.Value? radioSpecific. Проверено? 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 ]

11 голосов
/ 27 апреля 2010

Этот блок кода почти не читается. Не используйте троичный оператор только ради троичного оператора; это делается для того, чтобы сделать thigs more удобочитаемыми, исключив блоки if для очень простых выражений То, что у вас нет, не

6 голосов
/ 27 апреля 2010

Вы можете упростить свое выражение до этого:

if (any && !specified)
{
    return empty;
}
else
{
    return isClient ? textbox : dropdown;
}
5 голосов
/ 27 апреля 2010
any && !specified ? 
   empty : 
   isClient ? textbox : dropdown;  
0 голосов
/ 27 апреля 2010

Поместите блок isClient ? textbox : dropdown в метод и выполняйте вызовы методов из вашей первоначальной ветви = больше не нужно дублировать код.

...