Вы не можете привести List<OneType>
к List<OtherType>
, так как на самом деле это экземпляры списка, который вы хотите разыграть, а также сам список.
существует метод расширения, который позволит вам сделать это ( ссылка MSDN ):
IEnumerable<Object> myNewEnumerable = myEnumerable.Cast<Object>();
Этот метод будет пытаться привести каждый экземпляр спискаодин тип к другому типу и добавить их в новый перечисляемый.оно выдаст исключение, если какой-либо экземпляр не может быть приведен.
Что касается системы, то два типа для ваших списков - это просто разные типы, так что все равно, что сказать:
A objectOfTypeA;
B objectOfTypeB = (B) objectofTypeA;
Чтобы иметь возможность выполнять приведение, должно быть неявное или явное преобразование между доступными типами, которого нет (если вы не предоставили один, что вы могли бы сделать).
вы ожидаете, что это сработает, потому что List<object>
всегда сможет содержать любой тип в другом списке, но если вы подумаете об этом в этих терминах, вы поймете, почему это не так.
Я уверен, что есть более технически грамотный ответ, но я думаю, что в этом суть.
Вам может быть интересно прочитать серию Эрика Липперта о Ковариантности и Контравариантности , как этоможет быть полезным для вас.
Этот вопрос также может быть полезным