C#遍历DataTable行时如何按条件检测多列值 State列匹配失败怎么办
问题排查及解决方法
- 首先排查最常见的首尾空格问题:CSV读取时很容易把单元格前后的空格带入值中,直接全等匹配会失败,建议先对值做Trim处理
- 其次排查大小写匹配问题:如果数据源中存在小写/混合大小写的州名,可以启用不区分大小写的匹配逻辑
- 最后排查空值问题:如果某行的State列为空,直接调用ToString会抛出异常,建议先做非空判断
- 额外优化建议:原有日期判断采用硬截取字符串的方式稳定性差,建议改为日期类型解析后直接取年份判断,适配不同格式的日期输入
foreach(DataRow row in results.Rows) { // 优化后的日期判断逻辑,兼容性更强 if (DateTime.TryParse(row["Date"]?.ToString(), out DateTime date) && date.Year == 2021) { // 先判空、去除首尾空白字符再做匹配 string stateVal = row["State"]?.ToString()?.Trim() ?? string.Empty; // 如需不区分大小写匹配,可替换为下方注释的写法 // if (stateVal.Equals("CA", StringComparison.OrdinalIgnoreCase)) if (stateVal == "CA") { // 执行所需计算 } } }
如果调整后仍匹配失败,可添加临时调试代码输出原始值确认是否存在不可见特殊字符:
string rawState = row["State"]?.ToString() ?? "空值"; Console.WriteLine($"原始值:[{rawState}],长度:{rawState.Length}");
内容的提问来源于stack exchange,提问作者hidden82
相关产品推荐
相关产品推荐

