Универсальная коллекция с IEqualityComparer в конструкторе

#c# #collections

#c# #Коллекции

Вопрос:

Есть ли какая-либо коллекция в фреймворке, подобная этой?

 public class DesiredCollection<T>
{
    public DesiredCollection(IEqualityComparer<T> comparer) 
    {
    }
}
  

Требования:

  • универсальная коллекция;
  • IEqualityComparer или лямбда-выражение для определения равенства;
  • нет необходимости определять тип ключа;
  • получение элемента по ключу;
  • получение всех элементов как IEnumerable.

Комментарии:

1. Чего вы пытаетесь достичь? Какое поведение вам нужно, чтобы коллекция выполняла?

2. @artplastika Когда вы говорите, что не нужно определять тип ключа; получение элемента по ключу; , я думаю, вам нужно KeyedCollection<TKey, TItem> . Вы также можете указать свою IEqualityComparer<TKey> .

Ответ №1:

Различные коллекции принимают IEqualityComparer<T> свои конструкторы (обычно как одну перегрузку из нескольких). В частности, Dictionary<TKey, TValue> и HashSet<T> попадают в эту категорию. Они используют средство сравнения равенства для проверки наличия ключей / элементов.

Однако на самом деле вы не выразили ничего, кроме необходимости в конструкторе, использующем средство сравнения равенства. Предположительно, вам понадобится нечто большее … что вы пытаетесь сделать?

Комментарии:

1. Спасибо, я принимаю это как ответ. Когда я проектировал, я забыл, что мне нужно получить определенный элемент из коллекции по ключу, поэтому словарь неизбежен 🙂