【发布时间】:2011-01-17 02:54:10
【问题描述】:
这是我目前最喜欢的架构方法的一个示例:
public abstract class CollectionComparer {
public virtual SetEqual(IEnumerable enum1, IEnumerable enum2) {
if(enum1== null && enum2== null)
return true;
if(enum1== null && !(enum2== null))
return false;
if(!(enum1== null) && enum2== null)
return false;
if(enum1.GetType().DeclaringType != enum2.GetType().DeclaringType)
return false;
var col1 = (from e in enum1 select e).ToList()
var col2 = (from e in enum2 select e).ToList()
if(col1.Count != col2.Count)
return false;
foreach (element in col1)
if(!col2.Contains(element))
return false;
foreach (element in col2)
if(!col1.Contains(element))
return false;
return true;
}
}
public interface IProduct {
...
}
public interface IOrder {
...
ICustomer Customer { get; }
ICollection<IProduct> Products { get; }
}
public interface ICustomer {
...
ICollection<IOrder> Orders { get; }
}
public internal Order : CollectionComparer, IOrder {
#region IOrder interface implementation
...
#endregion
}
public internal Customer : CollectionComparer, ICustomer {
#region ICustomer interface implementation
...
#endregion
}
对于应用于集合的 object.Equals() 的等价物进行集合比较,这种 CollectionComparer 抽象类方法是否被视为一种良好做法?
【问题讨论】:
-
感谢 Daniel A. White 和“不退货不退款”提供这些非常出色的答案!不幸的是,我只能设置一个答案作为答案。考虑到我确定 collection 是否具有相等比较器的第一个目标,Daniel A. White 的答案是最好的。抱歉不退货不退款!
标签: .net oop ienumerable equals icollection