Почему в C # нельзя хранить объект List <string>в переменной List <object> - PullRequest
80 голосов
/ 09 августа 2008

Кажется, что объект List не может быть сохранен в переменной List в C # и даже не может быть явно приведен таким образом.

List<string> sl = new List<string>();
List<object> ol;
ol = sl;

приводит к невозможности неявного преобразования типа System.Collections.Generic.List<string> в System.Collections.Generic.List<object>

А потом ...

List<string> sl = new List<string>();
List<object> ol;
ol = (List<object>)sl;

приводит к невозможности преобразования типа System.Collections.Generic.List<string> в System.Collections.Generic.List<object>

Конечно, вы можете сделать это, вытащив все из списка строк и поместив его обратно по одному, но это довольно запутанное решение.

Ответы [ 14 ]

0 голосов
/ 27 апреля 2017
List<string> sl = new List<string>();
List<object> ol;
ol = new List<object>(sl);
0 голосов
/ 18 марта 2016

Мм, благодаря предыдущим комментариям я нашел два способа это выяснить. Первый - получить список строк элементов и затем привести его к списку объектов IEnumerable:

IEnumerable<object> ob;
List<string> st = new List<string>();
ob = st.Cast<object>();

И второй - избегать типа объекта IEnumerable, просто приводя строку к типу объекта, а затем используя функцию "toList ()" в том же предложении:

List<string> st = new List<string>();
List<object> ob = st.Cast<object>().ToList();

Мне больше нравится второй способ. Надеюсь, это поможет.

0 голосов
/ 15 октября 2009

У меня есть:

private List<Leerling> Leerlingen = new List<Leerling>();

И я собирался заполнить его данными, собранными в List<object> То, что наконец-то сработало для меня, было этим:

Leerlingen = (List<Leerling>)_DeserialiseerLeerlingen._TeSerialiserenObjecten.Cast<Leerling>();

.Cast это тип, который вы хотите получить IEnumerable из этого типа, затем введите IEnemuerable к List<>, который вы хотите.

0 голосов
/ 08 июня 2009

Вот еще одно решение до .NET 3.5 для любого IList, содержимое которого может быть явным образом приведено.

public IList<B> ConvertIList<D, B>(IList<D> list) where D : B
{
    List<B> newList = new List<B>();

    foreach (D item in list)
    {
        newList.Add(item);
    }

    return newList;
}

(на примере Zooba)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...