如何省略Switch语句When表达式中冗余的变量声明?
解决方案:用弃元消除冗余变量
你可以直接使用C#的**弃元符号(_)**来替代那些没用的变量名,弃元的作用就是标记不需要使用的匹配变量,而且不需要每次更换不同的名称,所有case都可以复用同一个_,完美解决你的问题。
第一种写法(推荐,类型明确)
这种写法明确限定了匹配string类型,逻辑更严谨:
string i = "a1"; switch (i) { case string _ when _.Contains("a", StringComparison.OrdinalIgnoreCase): case string _ when _.Contains("b", StringComparison.OrdinalIgnoreCase): case string _ when _.Contains("c", StringComparison.OrdinalIgnoreCase): case string _ when _.Contains("d", StringComparison.OrdinalIgnoreCase): { //some logic break; } case string _ when _.Contains("e", StringComparison.Ordinal): { //some logic break; } }
第二种写法(简化,适合固定类型场景)
如果你的switch变量确定是string类型,还可以进一步简化,省略string声明:
string i = "a1"; switch (i) { case _ when _.Contains("a", StringComparison.OrdinalIgnoreCase): case _ when _.Contains("b", StringComparison.OrdinalIgnoreCase): case _ when _.Contains("c", StringComparison.OrdinalIgnoreCase): case _ when _.Contains("d", StringComparison.OrdinalIgnoreCase): { //some logic break; } case _ when _.Contains("e", StringComparison.Ordinal): { //some logic break; } }
可选优化:合并多条件
如果你的逻辑允许,还可以把多个contains条件合并成一个case,进一步简化代码:
string i = "a1"; switch (i) { case string _ when _.Contains("a", StringComparison.OrdinalIgnoreCase) || _.Contains("b", StringComparison.OrdinalIgnoreCase) || _.Contains("c", StringComparison.OrdinalIgnoreCase) || _.Contains("d", StringComparison.OrdinalIgnoreCase): { //some logic break; } case string _ when _.Contains("e", StringComparison.Ordinal): { //some logic break; } }
这种写法适合不需要单独调整单个条件的场景,代码更紧凑。
内容的提问来源于stack exchange,提问作者Melon NG
相关产品推荐
相关产品推荐

