很難制定標題。 但是,我會盡快解釋我目前的選擇,希望有人能告訴我一個更好的方法來完成這項工作。c# - 基於Bool而無if語句的方法調用
第一個「快」的解決方案,我們不得不爲:
public class Test
{
public bool UseSomething = false;
public bool UseSomethingElse = false;
public bool UseAnother = false;
public void MyMethod(){
if(UseSomething){
if(UseSomethingElse){
if(UseAnother){
// UseSomething, UseSomethingElse, UseAnother
}
else{
// UseSomething, UseSomethingElse
}
}
else{
// UseSomething
}
}
else if(UseSomethingElse){
if(UseAnother){
// UseSomethingElse, UseAnother
}
else{
// UseSomethingElse
}
}
// etc...
}
}
現在,這是在我看來,一個醜陋的解決方案,併成爲真正的快速混亂,特別是如果你想添加的選項。更不用說,除了我自己以外,任何人都會一見鍾情,不知道去哪裏/改變什麼。
所以我很快想出了另一種解決方案如下:
public class Test
{
public bool UseSomething = false;
public bool UseSomethingElse = false;
public bool UseAnother = false;
short options = 0;
public void Init() // call this @ start of your program
{
if (UseSomething)
options += 1;
if (UseSomethingElse)
options += 2;
if (UseAnother)
options += 4;
}
public void MyMethod(){
Something something = MatchOption(foo);
}
public void MatchOption(Foo foo)
{
switch (options) // based on the Options value (which is unique for every bool-triggered) perform a specific method.
{
case 0: //000
return NoOptions(foo);
case 1: //100
return OptionSomething(foo);
case 2: //010
return OptionSomethingElse(foo);
case 4: //001
return ... etc;
case 3: //110
break;
case 5: //101
break;
case 6: //011
break;
case 7: // 111
break;
case -1:
return;
}
}
}
現在,這使得它更易於管理和人基本上就不會擔心這if/else語句把東西此外,這些方法是乾淨的,只做他們應該做的事情。
但我仍然不能放過它,必須有其他方式來做到這一點。
這不是一個代碼不起作用的問題。我更想要一個「最好」或「最乾淨」的方式來做到這一點。^_^ 我是第三年軟件工程師學生,仍然在尋找清理或優化代碼的方法。
如果您有任何意見或建議,請讓我知道!
注意:這主要是僞代碼,我沒有運行或測試過這個。這不是關於工作,這是我想弄明白的一個概念。
此問題似乎是脫離主題,因爲它是關於代碼審查,因此它屬於http://codereview.stackexchange.com/ – 2014-10-28 10:04:33
相關:[如果語句爲多個方案](http://stackoverflow.com/q /335858分之26347287)。 – dasblinkenlight 2014-10-28 10:08:45
所有DoSomething函數都具有相同的簽名嗎? – user3613916 2014-10-28 10:11:00