2

我有 2 个字符串列表 Header1Header2

List<String> Header1 = new List<String>();
Header1.add("String1");
Header1.add("String2");
Header1.add("String3");
Header1.add("String4");

    List<String> Header2 = new List<String>();
    Header2.add("STRING1");
    Header2.add("STRING2");

我想通过忽略区分大小写来Header2删除这些条目“String1”和“String2”。Header1

知道如何使用LINQ或字符串操作来完成它。

谢谢

4

4 回答 4

7
Header1.RemoveAll(x => 
            Header2.Contains(x, StringComparer.CurrentCultureIgnoreCase));
于 2013-07-15T04:36:32.863 回答
6

不需要Linq。该类List有一个方便的RemoveAll方法,您可以使用:

var stringsToRemove = new[] { "string1", "string2" };
var comp = StringComparison.InvariantCultureIgnoreCase;
Header1.RemoveAll(s => Header2.Any(t => s.Equals(t, comp)));
于 2013-07-15T04:33:11.720 回答
3

你可以做:

Header1.Except(Header2, new EqualityComparer<string>((a, b) => a.Equals(b, StringComparison,OrdinalIgnoreCase)));

允许您指定自定义比较器,EqualityComparer以便它仅在strings 相等时返回 true 而不考虑大小写。

MSDN 文档

于 2013-07-15T04:34:57.040 回答
3

我认为 LINQ 不允许您修改集合。但是,如果您乐于在没有来自 Header2 的项目的情况下生成新集合,请尝试以下操作:

var result = Header1.Except(Header2, StringComparer.OrdinalIgnoreCase);

如果您确实想修改原始列表,请尝试以下操作:

Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase));
于 2013-07-15T04:42:07.240 回答