【问题标题】:Non cap sensitive search C#非上限敏感搜索 C#
【发布时间】:2010-12-20 03:47:27
【问题描述】:

我想搜索一个字符串列表,不区分大小写。

尝试过 .Contains 和 ==

有没有办法做到这一点,或者我必须将整个字符串列表转换为非大写字母,然后搜索?

干杯!

【问题讨论】:

  • 我认为你的意思是写一个“不区分大小写”的搜索

标签: c# wpf algorithm string search


【解决方案1】:

设置了 StringComparison 参数的String.IndefOf 怎么样?或者,构建一个正则表达式。

【讨论】:

    【解决方案2】:

    一种方法。

    var answer = list.FirstOrDefault(item => item.Equals("test", StringComparison.CurrentCultureIgnoreCase));
    

    【讨论】:

    • 当 item 为 null 时,您将很容易在这里得到 NullReferenceException。
    • 执行此操作以使其为空安全:"test".Equals(item, StringComparison.CurrentCultureIgnoreCase).
    • FirstOrDefault 来自哪里
    • @Andrew,对于这个特定的示例,它将起作用。但是,如果实例和参数都可以为空,则不能以这种方式使其为空安全。所以最好使用String.Compare。
    • FirstOrDefault 是 System.Linq.Enumerable 中的扩展方法
    【解决方案3】:

    假设您使用 C# 3:

    var all = new [] {"A", "a", "AB", "aB", "Ab". "Etc"};
    var searchItem = "A";
    var found = all.Where (x => string.Compare(x, searchItem, StringComparison.InvariantCultureIgnoreCase) == 0);
    
    foreach(var foundItem in found)
      Console.WriteLine(foundItem);
    

    【讨论】:

      【解决方案4】:

      您可以简单地使用 String.ToUpper() 来比较不敏感。 (您要比较的两个字符串都大写)。

      或者.net lib中有更高级的字符串比较助手:

      见: http://en.csharp-online.net/CSharp_FAQ:_How_perform_a_case_insensitive_string_comparison

      【讨论】:

      • 这通常不是一个好主意,尤其是在您进行多次比较时。因为字符串是不可变的,所以必须创建一个临时字符串来进行比较。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多