Возможно, вам придется конвертировать вручную. Причина этого в том, что вы эффективно конвертируете в подмножество того, чем оно может быть. Все T
TBase
, но не все TBase
T
.
Хорошая новость заключается в том, что вы, вероятно, можете сделать это, используя Expression.Invoke , и применить соответствующее приведение / преобразование к TBase
вручную (конечно, улавливая любые проблемы безопасности типов).
Редактировать: Я прошу прощения за неправильное понимание направления, в котором вы хотели идти. Я думаю, что просто преобразование выражения по-прежнему ваш лучший путь в любом случае. Это дает вам возможность обрабатывать преобразование так, как вы хотите. Ответ Марка Гравелла здесь - самый компактный и понятный способ, которым я когда-либо видел.