如何解决IEqualityComparer和singleton
| 我想知道是否有可能在例如distinct ??中使用singleton作为comparerObject? 假设我有一个元素列表,并且需要在该列表上使用不同的函数。通常我会这样var result = list.distinct(new ListElementComparer);
ListElementComparer是一个实现IEqualityComparer接口的类。
但是,让我们假设我将以这种方式使用上面提到的代码。
List<List<Element>> elementList = new List<List<Elements>>();
List<List<Element>> resultList new List<List<Element>>();
foreach(var element in elementList )
resultList.AddRange(element.distinct(new ListElementComparer() ) );
因此,您可能会多次创建ListElementComparer对象。在这种情况下,在每次迭代中是否都使用了创建ListElementComparer的单调指令?如果我使用单例,这种独特的方法会起作用吗?
解决方法
是的,绝对可以,单例工作正常:
public class ListElementComparer : IEqualityComparer<List<Element>>
{
public static ListElementComparer Instance { get { return instance; } }
private static readonly ListElementComparer instance =
new ListElementComparer();
private ListElementComparer() {}
// Implement IEqualityComparer<List<Element>> here
}
然后:
resultList.AddRange(element.Distinct(ListElementComparer.Instance);
请注意,可以略微避免整个循环:
var resultList = elementList
.SelectMany(x => x.Distinct(ListElementComparer.Instance))
.ToList();
(这不适用于最初声明的类型,因为您的示例代码也无法正常工作...但是类似的东西也可以。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。