Мне не нравится твой дизайн класса.В частности, вы реализуете две разные версии IEnumerable<T>
, которые возвращают разных членов.Две версии, которые возвращают одни и те же члены, немного лучше, но мне все еще не очень нравится.
- Реализация
IEnumerable
, так что это совместимо с обоими IEnumerable<T>
здесь невозможно.В частности, это нарушает методы OfType
и Cast
linq. - Проблемы с разрешением перегрузки возникают практически везде.Такие методы, как
Select<T>(this IEnumerable<T> ...)
, не знают, какой IEnumerable
взять. - Вы не можете использовать
foreach
на MyClass
- Если оба
TypeA
и TypeB
являютсяТипы ссылок дисперсия IEnumerable<out T>
возвращается, чтобы укусить вас.Поскольку оба они предлагают IEnumerable<T'>
для всех своих общих предков. - Он плохо взаимодействует с языками динамически типов
- Класс, представляющий собой две разные коллекции одновременно, редко имеет смысл,Обычно это указывает на то, что что-то пошло не так при сопоставлении понятий с классами.
- Это сбивает с толку и трудно понять.Моя интуиция говорит мне, что это зло, и что я должен сжечь его огнем: P
И, вероятно, еще несколько проблем, о которых я еще не задумывался.
Работа вокругпрост и чист: имеет два отдельных перечислимых свойства.
public class MyClass
{
public IEnumerable<TypeA> TypeAs{get{_lstTypeA.Select(x=>x)}};
public IEnumerable<TypeB> TypeBs{get{_lstTypeB.Select(x=>x)}};
}