Как объединить ReadOnlyCollection

Конструктор ReadOnlyCollection требует, чтобы вы дали ему IList. Но если у вас есть некоторые ROC, которые вы хотите объединить и создать новый ROC, метод Concat возвращает IEnumerable. Что не является допустимым аргументом для передачи конструктору ROC.

Итак, как вы создаете ROC как объединение других ROC?

Пока что это лучшее, что я могу придумать:

ReadOnlyCollection<T> ROCConcat<T> ( ReadOnlyCollection<T> a, ReadOnlyCollection<T> b)
{
    List<T> tmp = new List<T>();
    foreach (T f in a.Concat(b))
        tmp.Add(f);
    return new ReadOnlyCollection<T>(tmp);
}

2 ответа

Решение

Я считаю, что вы можете использовать ReadOnlyCollectionBuilder для этого.

return (new ReadOnlyCollectionBuilder<T>(a.Concat(b))).ToReadOnlyCollection();

Создать новый List<> из вашего IEnumerable<>:

return new ReadOnlyCollection<T>(a.Concat(b).ToList());

Или я предпочитаю:

return a.Concat(b).ToList().AsReadOnly();

Они в основном делают то же самое, что вы придумали, но они немного проще для глаз.

Другие вопросы по тегам