首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEqualityComparer和单例

IEqualityComparer和单例
EN

Stack Overflow用户
提问于 2011-04-13 02:45:02
回答 1查看 1.2K关注 0票数 7

我想知道是否有可能在例如Distinct中使用单例作为comparerObject?

假设我有一个元素列表,需要对该列表使用distinct函数。通常我会这样做

代码语言:javascript
复制
var result  = list.Distinct(new ListElementComparer);

ListElementComparer是一个实现IEqualityComparer接口的类。但是,假设我将非常频繁地使用上面提到的代码,例如,以这种方式。

代码语言:javascript
复制
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的单例实例?如果我使用单例,distinct方法会起作用吗?

EN

回答 1

Stack Overflow用户

发布于 2011-04-13 02:46:09

是的,绝对可以,它可以很好地与单例一起工作:

代码语言:javascript
复制
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
}

然后:

代码语言:javascript
复制
resultList.AddRange(element.Distinct(ListElementComparer.Instance);

代码语言:javascript
复制
var resultList = elementList
                     .SelectMany(x => x.Distinct(ListElementComparer.Instance))
                     .ToList();

(这并不适用于最初声明的类型,因为您的示例代码也不能很好地工作...但类似的事情就会发生。)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5640071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档