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

如何判断C#列表中存在与输入字符串内容相同但大小写不同的元素

实现方案

你需要的判断逻辑需要同时满足两个条件:

  • 两个字符串忽略大小写时完全相等
  • 两个字符串严格区分大小写时不相等

同时你当前的Matches扩展方法实际是前缀匹配逻辑,如果要判断完整内容相同,需要先校验两个字符串长度一致,修正后的完整代码如下:

class Program
{
    static void Main(string[] args)
    {
        // 测试用例1:输入"animal" 预期返回true
        string input = "animal";
        List<string> items = new List<string>() { "Animal", "Ball" };
        
        bool hasCaseInsensitiveMatch = items.Any(x => 
            // 先判断长度一致,再做两次比较
            x.Length == input.Length 
            && x.Equals(input, StringComparison.OrdinalIgnoreCase) 
            && !x.Equals(input, StringComparison.Ordinal)
        );

        Console.WriteLine(hasCaseInsensitiveMatch); // 输出True

        // 测试用例2:输入"Animal" 预期返回false
        input = "Animal";
        hasCaseInsensitiveMatch = items.Any(x => 
            x.Length == input.Length 
            && x.Equals(input, StringComparison.OrdinalIgnoreCase) 
            && !x.Equals(input, StringComparison.Ordinal)
        );
        Console.WriteLine(hasCaseInsensitiveMatch); // 输出False
        
        Console.ReadLine();
    }
}

static class Extensions
{
    // 如果你需要保留扩展方法可以封装这个逻辑
    public static bool MatchesCaseDifferentOnly(this string source, string toCheck)
    {
        if (source == null || toCheck == null) return false;
        return source.Length == toCheck.Length 
               && source.Equals(toCheck, StringComparison.OrdinalIgnoreCase) 
               && !source.Equals(toCheck, StringComparison.Ordinal);
    }
}

如果不需要完全匹配,只需要前缀匹配符合大小写不同的要求,把判断逻辑里的Equals换成你原来的IndexOf判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:03