Они не одни и те же. Это то же самое, что и с List
и List
: они также не могут быть переданы друг другу. То, что AbstractContactEntity
является AbstractEntity
, не меняет этого. Извлечение интерфейса из EntityCollectionProxy
и его covariant тоже не работает, потому что вы хотите реализовать IList
, что означает, что у вас есть параметры ввода и возвращаемые значения типа T
, которые предотвращают ковариацию.
Единственным возможным решением является следующее:
var tmp = (EntityCollectionProxy)obj;
var col = tmp.Select(x => (AbstractEntity)x);
col
будет иметь тип IEnumerable
. Если вы хотите иметь EntityCollectionProxy
, вам нужно создать новый:
var result = new EntityCollectionProxy(col);
Это предполагает, что ваш класс EntityCollectionProxy
имеет конструктор, который принимает IEnumerable
. Но будьте осторожны, это будет новый экземпляр, а не тот, который возвращен resolver.DynamikInvoke
.