IEqualityComparer и синглтон - PullRequest
       2

IEqualityComparer и синглтон

6 голосов
/ 12 апреля 2011

Мне было интересно, есть ли возможность использовать синглтон в качестве объекта сравнения, например, в 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 типа You может создаваться довольно много раз.В этом случае есть ли смысл использовать синглетон, созданный для создания ListElementComparer в каждой итерации?Будет ли отличный метод работать, если я использую синглтон?

1 Ответ

8 голосов
/ 12 апреля 2011

Да, безусловно, он будет нормально работать с синглтоном:

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

(Это не совсем работает с первоначально объявленными типами, потому что ваш пример кода тоже не совсем работает ... но что-то похожее будет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...