Как объединить 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();
Они в основном делают то же самое, что вы придумали, но они немного проще для глаз.