那麼它不是很「乾淨」,但我會做
bool noneAreTrue = true;
if(a)
{
noneAreTrue = false;
}
if(b)
{
noneAreTrue = false;
}
if(c)
{
noneAreTrue = false;
}
if(noneAreTrue)
{
//execute if all above conditions are false
}
另外,如果你的條件真的是相當大的,我從書上清潔代碼由Robert推薦規則G28(包封物條件語句) C.馬丁
這是相當冗長,但在某些情況下更容易閱讀:
public void YourMethod()
{
if(SomeComplexLogic())
{
}
if(SomeMoreLogic())
{
}
if(EvenMoreComplexLogic())
{
}
if(NoComplexLogicApply())
{
}
}
private bool SomeComplexLogic(){
return stuff;
}
private bool EvenMoreComplexLogic(){
return moreStuff;
}
private bool EvenMoreComplexLogic(){
return evenMoreStuff;
}
private bool NoComplexLogicApply(){
return SomeComplexLogic() && EvenMoreComplexLogic() && EvenMoreComplexLogic();
}
對於複雜的情況可以,但可能不會只有3例。 – Guillaume
引用問題「這是因爲如果條件變得更復雜,代碼可能會變得非常混亂,它需要重寫很多代碼。」其他解決方案只是醜陋的,並沒有幫助可維護性。你也可以使用Func和/或Actions而不是我給的解決方案,這可能會簡化實現。 – Alistair
是的,我喜歡你的解決方案,我認爲它是最乾淨的,這就是爲什麼我選擇了它。但要使用它,你確實需要確保有一個複雜的場景,因爲在簡單的情況下,所有背後的工作可能都不值得。也許你可以在你的回答中顯示IStrategy的實現。 – Guillaume