You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#二维字符串数组元素与字符串变量==相等判定不生效问题求助

问题根因
  • 写入分类、名称时调用的WriteLine()方法会在内容末尾自动追加Windows默认换行符\r\n,读取时仅按\n分割字符串,导致分割后的每个字符串末尾残留看不见的\r字符,实际内容与选中分类不一致,因此==比较不生效。
  • 遍历固定长度二维数组时会访问未赋值的null元素,也会导致比较返回false,属于潜在风险。
快速修复方案
  1. 替换手动读取+分割的逻辑,使用.NET 内置的File.ReadAllLines()方法,会自动处理不同格式的换行符并过滤掉换行符,无需手动处理分割逻辑:
// 替换原有StreamReader读取、Split分割的代码
string[] current_cat = File.ReadAllLines(path_category, Encoding.UTF8);
string[] current_nam = File.ReadAllLines(path_name, Encoding.UTF8);
  1. 字符串比较前增加空校验、首尾空白字符过滤逻辑,进一步避免隐形字符问题:
if(!string.IsNullOrEmpty(values[1, i]) && values[1, i].Trim() == category_read.Trim())
{
    // 匹配成功的逻辑
}

排查小技巧:可以打断点查看两个比较字符串的Length属性,若长度不同就说明存在隐形字符。

优化实现建议
  • 避免分开存储分类、名称两个独立文件,容易出现行数错位匹配错误。可以定义结构化存储类,使用JSON序列化存储列表数据,.NET 内置System.Text.Json可直接完成序列化/反序列化操作,无需手动处理文本分割逻辑:
// 定义存储结构
public class TextRecord
{
    public string Category { get; set; }
    public string Name { get; set; }
}
// 存储时直接序列化List<TextRecord>到JSON文件
// 读取时直接反序列化为List<TextRecord>使用
  • 替换固定长度二维数组为List<T>动态集合,没有存储上限限制,也无需处理空元素遍历问题。
  • 所有文件操作使用using块包裹,避免异常时文件句柄未释放导致的文件占用错误。
  • 路径拼接使用Path.Combine()方法,无需手动处理斜杠,适配性更强。
  • 不要吞掉所有异常,catch块中增加错误提示逻辑,方便排查问题。

内容的提问来源于stack exchange,提问作者Tobias Schober

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:09:03