我正在尝试创建一个字符串列表,其中包含列表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
答案 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));