如何判断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
相关产品推荐
相关产品推荐

