1
我會盡我所能來解釋我在這裏做什麼 - 我已經使用這個方法了幾次,但從來沒有覺得倒是不錯。我相信一定有這樣做的更好的辦法,請賜教。IDictionary的複製合併 - 新增或更新現有的對象
class MyObject
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != typeof(MyObject))
{
return false;
}
return ((MyObject)obj).Id == Id;
}
public override int GetHashCode()
{
return Id;
}
}
[Test]
public void Blah()
{
IDictionary<object, MyObject> duplicateMergerDict = new Dictionary<object, MyObject>();
MyObject dup1 = new MyObject { Id = 0, Name = "Smith" };
MyObject dup2 = new MyObject { Id = 0, Name = "Collins" };
MyObject nonDup = new MyObject { Id = 1, Name = "Smith" };
IEnumerable<MyObject> test =
new[] { dup1, dup2, nonDup };
foreach (var myObject in test)
{
MyObject existing;
if (duplicateMergerDict.TryGetValue(myObject, out existing))
{
existing.Name = string.Format("{0} {1}", existing.Name, myObject.Name);
}
else
{
duplicateMergerDict.Add(myObject, myObject);
}
}
Assert.That(duplicateMergerDict.Count, Is.EqualTo(2));
Assert.That(duplicateMergerDict[dup1], Is.SameAs(dup1));
Assert.That(duplicateMergerDict[dup2], Is.SameAs(dup1));
Assert.That(dup1.Name, Is.EqualTo("Smith Collins"));
Assert.That(duplicateMergerDict[nonDup], Is.SameAs(nonDup));
}
基本上我想積累使用GetHashCode和等於重寫的重複條目。 (或者我應該使用組合鍵對象 - 甚至是更復雜的情況比這個?)。上面的方法似乎很麻煩,但也許這是最好的方法?
可有人比我更聰明,請告訴我,我可以在這個改進?
謝謝。
您是否在尋找'test.Distinct()'簡單?這返回2個項目。 –