Это связано с тем, что параметр T
в IEnumerable<T>
не является ковариантным в Silverlight. Для удобства MSDN говорит, что является ковариантным, однако в контенте сообщества кто-то еще указывает на то же самое:
Несмотря на приведенную выше документацию, параметр общего типа T в Silverlight не выглядит ковариантным.
Мы можем проверить это в Обозревателе объектов. В .NET Framework 4:
Обратите внимание, что объявление типа содержит out
.
А для Windows Phone 7:
В Windows Phone IEnumerable
нет out
. Вы не можете объявить TModel
ковариант, потому что IEnumerable<T>
не гарантирует, что это ковариант. Нет причины, по которой это не могло быть; Microsoft просто нужно обновить его.
РЕДАКТИРОВАТЬ : После некоторых копаний похоже, что это известная проблема в Microsoft Connect, помеченная как «исправленная». Вероятно, это было исправлено в Silverlight 5; который Windows Phone еще не использует.