我完全同意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.
}
雖然這些更可讀嗎?嗯...可能不是。
我認爲減少圈複雜性本身不應該是一個目標。編寫可讀代碼應該。 – svick
是名稱,年齡等,多態,還是他們共享一個有用的基類? – GregRos
你確定這是做你想做的事嗎?你想只設置一種背景顏色嗎?或者您是否希望_every_項目的背景設置爲空? – NominSim