C 中一種替換switch語句更優雅的寫法

2021-09-07 22:37:45 字數 1301 閱讀 9199

今天在專案中遇到了使用switch語句判斷條件,但問題是條件比較多,大概有幾十個條件,滿螢幕的case判斷,是否有更優雅的寫法替代switch語句呢?

假設有這樣的乙個場景:商場經常會根據情況採取不同的打折方案,如果打折方案比較少,可以考慮使用switch語句作判斷。但如果有幾十甚至幾百種打折方案的時候,用switch語句就不夠優雅。

先來乙個打折介面。

public inte***ce ivalueprocessor
形參policy用來接收有關打折的列舉項,形參orginprice表示打折前的**。有關打折的列舉項為:

public enum policyenum
實現ivalueprocessor介面,根據不同的policyenum項採取不同的演算法。

public class myvalueprocessor : ivalueprocessor
}
}
客戶端呼叫如下:

static void main(string args)
以上寫法沒有太大的問題,是否有替換switch判斷,一種更優雅的寫法呢?

在myvalueprocessor類的dazhe(short policy,decimal orginprice)方法中,接收乙個short型別的形參和乙個decimal型別的形參,返回decimal型別,在方法內部,把short型別的形參作為switch語句的判斷條件,再使用不同的演算法得到返回值。可以進一步抽象:把short型別作為字典集合中的key,把演算法,即委託作為字典集合的value。這樣,我們就可以把各種打折方案封裝在字典集合中。修改如下:

public class myvalueprocessor : ivalueprocessor
,
,
,
,
};
}
public decimal dazhe(short policy,decimal orginprice)
return orginprice / 2;
}
}
這樣,在dazhe(short policy,decimal orginprice)方法內部,只要判斷傳入的short型別實參是否是字典集合的key就可以了。    

C C 中switch用法的一種替換方式

在c c 中,switch語句是經常被用到的,當switch內的case語句較多時程式有時顯得比較繁亂,此種情況下可以用另外一種實現方式替代switch。詳細用法見例子 include stdafx.h float addfunc float a,float b float subfunc floa...

C C 中switch用法的一種替換方式

在c c 中,switch語句是經常被用到的,當switch內的case語句較多時程式有時顯得比較繁亂,此種情況下可以用另外一種實現方式替代switch。詳細用法見例子 include stdafx.h float addfunc float a,float b float subfunc floa...

Lua 實現switch的一種方案

local et case one 1 local et case two 2 local function do case one print do case one endlocal function do case two print do case two endlocal function...