Ковариация с C #

Я встретил некоторую интересную проблему ковариации в моем коде c #.

У меня есть общийMatrix<T> класс, и это было создано, например,Matrix<int>, Matrix<object> а такжеMatrix<Apple>.

Для моей бизнес-логики я обернул их в общийWrapper<T>, Этот Wrapper реализует неуниверсальныйINonGenericWrapper интерфейс. Так что яWrapper<int>, Wrapper<object> а такжеWrapper<Apple>.

Моя проблема: Я хотел бы определить контейнер для всех этих 3Wrappers. Не могу сказатьList<Wrapper<object>>потому что я не могу вставитьWrapper<int> в эту коллекцию. Я даже не могу сказатьList<INonGenericWrapper>потому что в моем foreach я хотел бы получить доступ к универсальномуMatrix<T> параметр.

Дрянная часть: эти Wrappers будут (де) сериализованы с определенным типом:MySerializer<Wrapper<Apple>>.Serialize(_myInstanceOfWrappedApple).

Я думаю, что ясно, что я хотел бы избежать огромных переключателейtypeof при сериализации ..

Каковы мои возможные обходные пути? Я вроде застрял.

Заранее спасибо,

Ответы на вопрос(2)

Ваш ответ на вопрос