Ковариация с C #
Я встретил некоторую интересную проблему ковариации в моем коде c #.
У меня есть общийMatrix<T>
класс, и это было создано, например,Matrix<int>
, Matrix<object>
а такжеMatrix<Apple>
.
Для моей бизнес-логики я обернул их в общийWrapper<T>
, Этот Wrapper реализует неуниверсальныйINonGenericWrapper
интерфейс. Так что яWrapper<int>
, Wrapper<object>
а такжеWrapper<Apple>
.
Моя проблема: Я хотел бы определить контейнер для всех этих 3Wrapper
s. Не могу сказатьList<Wrapper<object>>
потому что я не могу вставитьWrapper<int>
в эту коллекцию. Я даже не могу сказатьList<INonGenericWrapper>
потому что в моем foreach я хотел бы получить доступ к универсальномуMatrix<T>
параметр.
Дрянная часть: эти Wrappers будут (де) сериализованы с определенным типом:MySerializer<Wrapper<Apple>>.Serialize(_myInstanceOfWrappedApple)
.
Я думаю, что ясно, что я хотел бы избежать огромных переключателейtypeof
при сериализации ..
Каковы мои возможные обходные пути? Я вроде застрял.
Заранее спасибо,