如何在C#的常量字符串列表中验证字符串是否存在
C# 判断字符串是否存在于常量字符串列表的最简方法
需求:判断指定字符串Destination.Name是否存在于{"MA", "MB", "MC", "MD", "ME", "MF", "MG"}这组常量字符串中,以下是两种尝试过但无法正常运行的写法:
// 第一种尝试 if (Destination.Name in {"MA", "MB", "MC", "MD", "ME", "MF", "MG"}) // 第二种尝试 if IndexOf(new string[] { "MA", "MB", "MC", "MD", "ME", "MF", "MG" }, Destination.Name)
正确的最简实现方式
1. 用LINQ的Contains方法(需引用System.Linq)
这是最直观的写法,通过LINQ扩展方法直接判断数组是否包含目标字符串:
using System.Linq; // ... if (new[] { "MA", "MB", "MC", "MD", "ME", "MF", "MG" }.Contains(Destination.Name)) { // 字符串存在时执行的逻辑 }
2. 用Array.IndexOf(无需LINQ)
通过数组静态方法获取目标字符串的索引,判断索引是否不等于-1(-1表示未找到):
if (Array.IndexOf(new string[] { "MA", "MB", "MC", "MD", "ME", "MF", "MG" }, Destination.Name) != -1) { // 字符串存在时执行的逻辑 }
3. C# 9.0+ 模式匹配写法
如果使用较新版本的C#,可以用更简洁的语法实现:
// C# 9.0+ 支持的或模式 if (Destination.Name is "MA" or "MB" or "MC" or "MD" or "ME" or "MF" or "MG") { // 逻辑代码 } // C# 10.0+ 支持的列表模式,和你最初的思路最接近 if (Destination.Name in ["MA", "MB", "MC", "MD", "ME", "MF", "MG"]) { // 逻辑代码 }
优化建议(多次判断场景)
如果这个字符串列表会被多次使用,建议提前定义为常量集合(比如HashSet<string>),避免每次创建新数组,提升性能:
// 定义为类级别的常量集合 private static readonly HashSet<string> TargetDestinationNames = new HashSet<string> { "MA", "MB", "MC", "MD", "ME", "MF", "MG" }; // 后续判断时直接调用 if (TargetDestinationNames.Contains(Destination.Name)) { // 逻辑代码 }
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

