【问题标题】:Check if a list contains the same string with different case检查列表是否包含具有不同大小写的相同字符串
【发布时间】:2021-12-17 06:26:06
【问题描述】:

我正在尝试提供一个查询,该查询告诉我天气是否字符串列表仅在大小写不同的情况下与输入匹配。请帮忙。

如果输入是“动物”,那么我需要得到一个真实的。如果输入是“Animal”,那么我应该得到一个错误,因为输入与项目列表中的大小写完全匹配。我不能说 StringComparison.OrdinalIgnoreCase 因为它总是返回一个 true。

class Program
    {
        static void Main(string[] args)
        {
            string abc = "animal";
            List<string> items = new List<string>() { "Animal", "Ball" };
            if (items.Any(x => x.Matches(abc, StringComparison.Ordinal)))
            {
                Console.WriteLine("matched");
            }
            Console.ReadLine();
        }

    }

    static class Extentions
    {
        public static bool Matches(this string source, string toCheck, StringComparison comp)
        {
            return source?.IndexOf(toCheck, comp) == 0;
        }
    }

【问题讨论】:

  • IndexOf0 比较是个坏主意也是 因为如果source"Animalissimo" 并且toCheck"animal",那么索引返回的是0,因为有一个子字符串最初从source开始。

标签: c# list linq


【解决方案1】:

您可以比较两次:区分大小写区分大小写:

if (items.Any(item => abc.Equals(item, StringComparison.OrdinalIgnoreCase) && 
                      abc.Equals(item, StringComparison.Ordinal))) 
{
    Console.WriteLine("matched");
}

【讨论】:

  • 谢谢你的作品。
【解决方案2】:

如果我理解正确,我想你正在寻找这个:

    if (items.Any(t => abc.Equals(t, StringComparison.OrdinalIgnoreCase) &&
                  t != abc))
    {
        Console.WriteLine("matched");
    }

if 的第一部分将匹配字符串以检查第二部分将确保它们的大小写不同。

【讨论】:

  • 感谢工作。我正是在寻找那个。
  • 不要使用ToLower 进行不区分大小写的比较 - 有些字母不会在大写和小写之间往返。使用StringComparison.XXXIgnoreCase 比较之一
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多