如何从列表中删除字符串对象?

时间:2013-07-15 04:31:20

标签: c# linq list

我有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中删除Header1中的这些条目“String1”和“String2”。

任何想法如何使用LINQ或字符串操作。

由于

4 个答案:

答案 0 :(得分:7)

Header1.RemoveAll(x => 
            Header2.Contains(x, StringComparer.CurrentCultureIgnoreCase));

答案 1 :(得分:6)

Linq没有必要。 List类有一个方便的RemoveAll方法可供您使用:

var stringsToRemove = new[] { "string1", "string2" };
var comp = StringComparison.InvariantCultureIgnoreCase;
Header1.RemoveAll(s => Header2.Any(t => s.Equals(t, comp)));

答案 2 :(得分:3)

你可以这样做:

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

EqualityComparer允许您指定一个自定义比较器,这样只有在string s相等而不考虑大小写时它才会返回true。

MSDN documentation

答案 3 :(得分:3)

我不认为LINQ允许您修改集合。但是,如果您很乐意在没有Header2项目的情况下制作新的集合,请尝试以下方法:

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

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

Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase));