Сообщение об ошибке недостаточно информативно, и это моя вина. Извините за это.
Проблема, с которой вы столкнулись, является следствием того факта, что ковариация работает только для ссылочных типов.
Возможно, вы сейчас говорите "но IA
- это ссылочный тип". Да, это. Но вы не сказали, что T
равно IA
. Вы сказали, что T
- это тип, который реализует IA
, а тип значения может реализовывать интерфейс . Поэтому мы не знаем, будет ли работать ковариация, и мы запрещаем это.
Если вы хотите, чтобы ковариация работала, вы должны сообщить компилятору, что параметр типа является ссылочным типом с ограничением class
, а также с ограничением интерфейса IA
.
В сообщении об ошибке действительно должно быть сказано, что преобразование невозможно, потому что ковариация требует гарантии ссылочного типа, так как это фундаментальная проблема.