能否用CASE语句处理动态DropdownList(除0.20外)的折扣校验?
动态下拉列表的折扣金额校验逻辑优化
问题描述
我有一个从SQL Server数据库动态填充的DropDownList控件(ID为ddlWaterLevels),当前包含0.20和0.30两个选项值,后续还需添加更多选项。业务规则为:当选择0.20时,折扣金额需≤100美元;选择其他选项时,折扣金额需≤50美元。目前用switch语句实现了部分逻辑,但不知如何处理除0.20外的所有动态选项,想了解是否可用CASE语句实现该需求,现有代码如下:
protected bool CheckWaterLevel(string wsize, decimal amt) { bool valueOK = false; switch (wsize) { case "0.20": if (amt <= 100) valueOK = true; break; case "0.30": if (amt <= 50) valueOK = true; break; } return valueOK; }
解决方案
你的核心需求是不用为每个新增选项单独写判断逻辑,直接处理除"0.20"外的所有情况,以下是几种简洁的实现方式:
方式一:三元运算符直接判断(最简洁)
直接通过条件分支区分两种规则,代码量最少:
protected bool CheckWaterLevel(string wsize, decimal amt) { return wsize == "0.20" ? amt <= 100 : amt <= 50; }
方式二:带Default分支的Switch语句(对应你说的CASE处理所有其他情况)
在C#的switch中,default分支会匹配所有未被明确case定义的选项,刚好适配动态新增的下拉选项,不需要后续修改代码:
protected bool CheckWaterLevel(string wsize, decimal amt) { bool valueOK = false; switch (wsize) { case "0.20": valueOK = amt <= 100; break; default: // 覆盖所有除0.20外的选项,包括未来新增的 valueOK = amt <= 50; break; } return valueOK; }
这两种方式都能完美支持后续动态添加的选项,不用再逐个新增case判断。
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

