7

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

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

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 是否有任何意义?如果我使用单例,不同的方法会起作用吗?

4

1 回答 1

9

是的,绝对可以,它适用于单例:

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();

(这对于最初声明的类型不太适用,因为您的示例代码也不太适用......但类似的东西会。)

于 2011-04-12T18:46:08.870 回答