C#中含多表达式的if条件如何实现简洁编码?
嘿,完全懂你想要的那种清爽写法——谁愿意反复敲str ==啊!可惜你举的第一个简化例子if(str == "a" || "b" || "c" || "d")在绝大多数语言里都不生效,因为逻辑或||两边得是布尔值,而"b"是字符串,编译器/解释器会直接报错。不过针对第二个str in {"a", "b", "c", "d"}的思路,不同语言里有非常接近的简洁实现,给你整理几个常见场景:
C#(你提到了LINQ,应该是用这个)
如果你用的是C# 9.0及以上版本,模式匹配的or语法完美符合你的需求,写法超级简洁:
if (str is "a" or "b" or "c" or "d")
完全不用重复写str ==,可读性拉满。
要是你用的是C# 12+,还可以结合集合表达式,用Contains也能更短:
if (["a", "b", "c", "d"].Contains(str))
比手动创建List<string>或者数组要清爽很多。
Python
Python原生就支持你想要的in语法,直接写就行,甚至用集合还能提升查找效率:
if str in {"a", "b", "c", "d"}:
这里用{}创建集合(而不是列表[]),因为集合的成员查找是O(1)的,比列表的O(n)更快,值越多越明显。
JavaScript/TypeScript
可以用数组的includes方法,写法也很简洁:
if (["a", "b", "c", "d"].includes(str))
如果是少量值,也可以用正则表达式凑活,但可读性不如数组includes:
if (/^(a|b|c|d)$/.test(str))
小提醒
虽然有些技巧能实现类似效果,但还是得优先考虑可读性——比如正则表达式如果值太多会变得很乱,而模式匹配/in语法几乎是一目了然的。
内容的提问来源于stack exchange,提问作者Saadi
相关产品推荐
相关产品推荐

