在C#中区分两个字符串列表

时间:2013-01-27 05:46:39

标签: c# list except

我正在尝试创建一个字符串列表,其中包含列表A和列表B之间不同的所有项目。我有以下代码,我觉得我很接近,但我在最后得到语法错误线。任何帮助将不胜感激:

 List<string> ListA = new List<string>(textBox_CompareListA.Text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries));
 List<string> ListB = new List<string>(textBox_CompareListB.Text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries));

 List<string> DifferencesList = ListA.Except(ListB, StringComparer.OrdinalIgnoreCase).Union(ListB.Except(ListA, StringComparer.OrdinalIgnoreCase));

以下是错误:http://screencast.com/t/Y8S9LC2Y

Syntax Error

3 个答案:

答案 0 :(得分:4)

您应该尝试调用Enumerable.ToList从查询表达式中获取列表。

List<string> DifferencesList = ListA.Except(ListB, StringComparer.OrdinalIgnoreCase).Union(ListB.Except(ListA, StringComparer.OrdinalIgnoreCase)).ToList();

答案 1 :(得分:2)

我无法抗拒指出这一点:

 List<string> diffs = ListA.Union(ListB).Except(ListA.Intersect(ListB)).ToList();

根据您的数据,它可能更快(我相信如果交叉点很小)。

答案 2 :(得分:1)

更改最后一行代码:

List<string> DifferencesList = ListA.Except(ListB, StringComparer.OrdinalIgnoreCase).Union(ListB.Except(ListA, StringComparer.OrdinalIgnoreCase));

致:

var DifferencesList = ListA.Except(ListB, StringComparer.OrdinalIgnoreCase).Union(ListB.Except(ListA, StringComparer.OrdinalIgnoreCase));

或者:

IEnumerable<string> DifferencesList = ListA.Except(ListB, StringComparer.OrdinalIgnoreCase).Union(ListB.Except(ListA, StringComparer.OrdinalIgnoreCase));