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

C#中AreYou方法返回意外bool值:大小写匹配逻辑排查

问题分析与修复方案

问题根源

你存储标识符时统一转成了小写(id.ToLowerInvariant()),但调用AreYou方法时,直接用传入的原始字符串(比如大写的"KHA")去匹配列表里的小写字符串。而C#中List<string>.Contains默认使用区分大小写的字符串比较,所以"KHA"和"kha"被判定为不相等,导致返回false。

修复方案

有两种可靠的修复方式:

方式1:将传入的查询字符串也转为小写(与存储逻辑保持一致)

修改AreYou方法,把传入的id也转成小写后再进行匹配:

public bool AreYou(string id)
{
    return _identifiers.Contains(id.ToLowerInvariant());
}

方式2:使用不区分大小写的比较器

利用Contains的重载方法,指定StringComparer.OrdinalIgnoreCase进行不区分大小写的比较:

public bool AreYou(string id)
{
    return _identifiers.Contains(id, StringComparer.OrdinalIgnoreCase);
}

补充说明

  • 推荐使用OrdinalIgnoreCase或ToLowerInvariant,这两种方式不受系统区域设置影响,能保证跨环境的比较一致性。
  • 两种方案都能解决你的问题,选择哪种取决于你的代码习惯:如果后续有其他需要统一小写的场景,方式1更贴合现有存储逻辑;如果只是需要比较时忽略大小写,方式2更直接。

原代码回顾

Identifiable类代码

public void AddIdentifier(string id)
{ 
   _identifiers.Add(id.ToLowerInvariant());
}

// 构造函数中调用AddIdentifier将所有初始标识符转为小写
public Identifiable(string[] idents)
{
    _identifiers = new List<string>(idents.Length);
    foreach (string id in idents)
    {
        AddIdentifier(id);
    }
}

// 原AreYou方法(存在问题)
public bool AreYou(string id)
{
    return _identifiers.Contains(id);
}

Main类测试代码

public static void Main(string[] args)
{       
    string[] identifiers = new string[] { "kha", "fren", "something" };

    Identifiable identifiable = new Identifiable(identifiers);
    Console.WriteLine($"testing for AreYou: {identifiable.AreYou("kha")}");// 返回true
    Console.WriteLine($"Testing for case sensitivity AreYou: {identifiable.AreYou("KHA")}");// 原代码返回false,修复后返回true
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:48:24