私は svick のコメントに完全に同意します。場合によっては、次のアプローチが適切な場合があります (ただし、循環的な複雑さを軽減するためではなく、一般的にプラグイン可能な意思決定者を作成するためです)。
public class SwitchAction{
public Func<bool> Predicate { get; set; }
public Action TheAction { get; set; }
}
public List<SwitchAction> SwitchableActions = new List<SwitchAction>();
public void InitialiseSwitchableActions()
{
SwitchableActions.AddRange(new[] {
new SwitchAction() { Predicate = () => Name.Text == string.Empty,
TheAction = () => Name.Background = Brushes.LightSteelBlue },
new SwitchAction() { Predicate = () => Age.Text == string.Empty,
TheAction = () => Age.Background = Brushes.LightSteelBlue },
});
}
public void RunSwitchables()
{
var switched = SwitchableActions.FirstOrDefault(s => Predicate());
if(switched != null)
switched.TheAction();
else
//TODO: something else.
}
もちろん、実際にこれらのアクションが相互に排他的でない場合は、最後のメソッドを少し変更する必要があります。
public void RunSwitchables()
{
bool runCatchAll = true;
foreach(var switched in SwitchableActions.Where(a => a.Predicate())
{
switched.TheAction();
runCatchAll = false;
}
if(runCatchAll)
//TODO: Something else.
}
これらのどちらかがより読みやすいですか?うーん...おそらくそうではありません。