C#中if语句比较多个字符串的更优实现方法
C# 代码优化方案
多字符串等值判断优化
原有连续||判断功能无逻辑错误,但可维护性、扩展性不足,推荐使用HashSet<string>实现包含判断:
// 定义为类级静态只读字段,避免每次执行逻辑重复初始化 private static readonly HashSet<string> MatchTargets = new HashSet<string> { "abc", "def", "ghi" }; // 业务判断逻辑 if (MatchTargets.Contains(d)) { // 自定义业务代码 }
方案优势:
- 增删匹配值仅需修改集合初始化内容,无需重复编写
d == xxx的判断语句,可读性更高 HashSet的包含判断时间复杂度为O(1),匹配项数量较多时性能优于连续或判断- 需调整匹配规则时(如忽略大小写),直接在集合初始化时传入对应比较器即可,例如
new HashSet<string>(StringComparer.OrdinalIgnoreCase)
注意:C# 字符串的
==运算符已做重载,默认行为和string.Equals()完全一致,常规场景下无需特意替换二者。
流读取与字符串分割优化
原有读取、分割代码缺少空值校验,存在空引用异常风险,优化后写法:
var line = sr.ReadLine(); // 空值校验,规避流读取到末尾返回null时调用Split抛出异常 if (string.IsNullOrWhiteSpace(line)) { // 按需处理空行/流结束逻辑 return; } // 传入分割选项,自动移除空条目、裁剪字段前后空白,减少后续冗余处理 string[] values = line.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
报错排查相关说明
你之前尝试的「条件后追加&& false」「替换==为Equals」两种排查手段未生效,符合预期——这两种方式仅能验证当前判断分支的执行路径问题,既然已经证实报错和这段字符串判断逻辑无关,自然无法通过这两种方式定位根因。
内容的提问来源于stack exchange,提问作者Miles
相关产品推荐
相关产品推荐

