它不是最漂亮的實現,但你可以做到這一點的最快方法是:
var tempA = new HashSet<int>(inputA.Select(item => item.Id));
var tempB = new HashSet<int>(inputB.Select(item => item.Id));
var resultA = new List<Category>(inputA.Count);
var resultB = new List<Category>(inputB.Count);
foreach (var value in inputA)
if (tempB.Contains(value.Id))
resultA.Add(value);
foreach (var value in inputB)
if (!tempA.Contains(value.Id))
resultB.Add(value);
resultA.TrimExcess();
resultB.TrimExcess();
// and if needed:
inputA = resultA;
inputB = resultB;
如果您需要超過item.id獨特然後用一個新的記錄,如:
inputA.Select(item => new Tuple<int, string>(item.Id, item.Title));
另一種選擇是在你的類類重寫.GetHashCode如:
public override int GetHashCode()
{
return Id.GetHashCode();
}
public override bool Equals(object obj)
{
var typedObj = obj as Category;
if (typedObj == null)
return false;
return Title == typedObj.Title && Id == typedObj.Id && Rank == typedObj.Rank;
}
你試過'.Except()'擴展方法嗎? – 2014-09-19 08:55:38
我試過,但是,問題是我不使用對象的所有屬性,它不工作。可以選擇要比較的屬性? – Julien698 2014-09-19 09:06:20
Except()方法可以採用必須實現的IEqualityComparer(http://msdn.microsoft.com/zh-cn/library/vstudio/ms132151%28v=vs.100%29.aspx)。它應該執行你想要的比較。 – 2014-09-19 09:09:56