1

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;

または概略形式:

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

明らかに、2つの異なるレベルで重複したブロックがあります。このコードを最適化して、おそらく1つに分割することは可能ですか?またはそのようなもの..

4

4 に答える 4

11

そのコードブロックはほとんど読めません。三項演算子のためだけに三項演算子を使用しないでください。非常に単純な式のブロックを削除することで、泥棒を読みやすくするためにあります。ifあなたが持っているものはそうではありません。

于 2010-04-27T18:53:11.427 に答える
6

あなたはこれにあなたの表現を単純化することができます:

if (any && !specified)
{
    return empty;
}
else
{
    return isClient ? textbox : dropdown;
}
于 2010-04-27T18:53:03.553 に答える
5
any && !specified ? 
   empty : 
   isClient ? textbox : dropdown;  
于 2010-04-27T18:55:09.380 に答える
0

ブロックをメソッドに入れて、isClient ? textbox : dropdown元のブランチからメソッド呼び出しを行う=コードの重複はもうありません。

于 2010-04-27T18:53:15.970 に答える