【发布时间】:2013-10-04 14:33:50
【问题描述】:
我有两个列表:
List<L1>, List<L2>
L1 = { detailId = 5, fileName = "string 1" }{ detailId = 5, fileName = "string 2" }
L2 = { detailId = 5, fileName = "string 2" }{ detailId = 5, fileName = "string 3" }
我想将它们结合起来,不要重复:
List<L3>
L1 = { detailId = 5, fileName = "string 1" }{ detailId = 5, fileName = "string 2" }{ detailId = 5, fileName = "string 3" }
我试过了:
L1.Union(L2).ToList();
L1.Concat(L2).Distinct().ToList();
但两者都返回重复项 (1, 2, 2, 3)。
不知道我错过了什么。
edit 方法如下。它采用一个列表并从一个分隔字符串创建另一个列表,并尝试将它们组合起来。
private List<Files> CombineList(int detailId, string fileNames)
{
List<Files> f1 = new List<Files>();
List<Files> f2 = new List<Files>();
f1 = GetFiles(detailId, false);
if (f1[0].fileNames != "")
{
string[] names = fileNames.Split('|');
for (int i = 0; i < names.Length; i++)
{
Files x = new Files();
x.detailId = detailId;
x.fileNames = names[i];
f2.Add(x);
}
List<Files> f3 = f1.Union(f2).ToList();
}
return f3;
}
【问题讨论】:
-
对象是如何比较的?
Union使用默认的相等比较器 -
我会用我正在使用的方法进行编辑。
-
那是因为你还没有在
L1和L2上实现IEquatable<T>。