代码之家  ›  专栏  ›  技术社区  ›  Urda Gael Fraiteur

部分匹配ObservableCollection<string>对象

  •  1
  • Urda Gael Fraiteur  · 技术社区  · 14 年前

    好吧,假设我有一个 ObservableCollection<string> 对象。在这个对象中,我有各种各样的字符串:

    SomeString01
    SomeString-02
    somestring-03
    SOMESTRING.04
    aString
    

    我想输入,我们称之为 pattern 并将其存储为来自用户界面的字符串,并在 ObservableCollection . 我需要做的是对收集的部分匹配,一切都会是这样的 不敏感 . 最后我想把这些汇编成一个全新的 可观测采集 . 下面是一些例子:

    pattern = "SoME"
    
    // RESULTS:
    SomeString01
    SomeString-02
    somestring-03
    SOMESTRING.04
    
    /* --- */
    
    pattern = "-0"
    
    // RESULTS:
    SomeString-02
    somestring-03
    
    /* --- */
    
    pattern = "ING0"
    
    // RESULTS:
    SomeString01
    
    pattern = "s"
    
    // RESULTS:
    SomeString01
    SomeString-02
    somestring-03
    SOMESTRING.04
    aString
    

    在ClickOnce应用程序中,最好的方法是什么?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Dave Hanson    14 年前

    就像盖布在评论中回答的那样。

    但更具体一点

    .Where(x => x.IndexOf("Some",StringComparison.InvariantCultureIgnoreCase) != -1)
    
        2
  •  0
  •   Community CDub    8 年前

    好吧,我实际上用谷歌搜索了更多,找到了一个更好的解决方案:

    可以使用indexof()并传递StringComparison.OrdinalIgnoreCase

    string title = "STRING";
    bool contains = title.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
    

    更好的方法是为字符串定义新的扩展方法:

    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source.IndexOf(toCheck, comp) >= 0;
    }
    
    string title = "STRING";
    bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase);
    

    贡献: JaredPar

    来源: Case insensitive 'Contains(string)'


    所以现在我已经在我的源代码中实现了它,如下所示:

    foreach (string source in SourceStrings)
    {
        // Code for some pre-reqs here
    
        if (source.IndexOf(Pattern, StringComparison.OrdinalIgnoreCase) >= 0)
        {
            subset.Add(source);
        }
    
        // Finish up anything else I had to do here
    }