Невозможно неявно преобразовать тип void в IList <int> - PullRequest
0 голосов
/ 07 октября 2009
 string categoryIDList = Convert.ToString(reader["categoryIDList"]);

    if (!String.IsNullOrEmpty(categoryIDList))
    {
        c.CategoryIDList  =
            new List<int>().AddRange(
                categoryIDList 
                    .Split(',')
                    .Select(s => Convert.ToInt32(s)));

    }

У класса есть свойство IList CategoryIDList, которое я пытаюсь назначить выше.

Ошибка:

Ошибка 1 Не удается неявно преобразовать тип 'void' в 'System.Collections.Generic.IList'

Не знаете, в чем проблема?

Ответы [ 5 ]

5 голосов
/ 07 октября 2009

Ваша проблема в том, что метод AddRange универсального класса List объявлен как возвращающий void.

Обновление : отредактировано для исправления проблемы List<int> против IList<int>.

Вам необходимо изменить его на:

List<int> foo = new List<int>();
foo.AddRange(
    categoryIDList 
    .Split(',')
    .Select(s => Convert.ToInt32(s)));
c.CategoryIDList = foo;
3 голосов
/ 07 октября 2009

Почему бы не инициализировать список с результатами вашего запроса select вместо выполнения AddRange, поскольку он принимает IEnumerable в качестве перегрузки:

c.CategoryIDList = new List<int>(categoryIDList.Split(',')
 .Select(s => Convert.ToInt32(s)));
2 голосов
/ 07 октября 2009

AddRange не возвращает список - он возвращает void. Вы можете сделать это через конструктор для List<T> , который принимает перечисляемое значение :

string categoryIDList = Convert.ToString(reader["categoryIDList"]);

if (!String.IsNullOrEmpty(categoryIDList))
{
    c.CategoryIDList  =
        new List<int>(
            categoryIDList.Split(',').Select(s => Convert.ToInt32(s))
        );
}
1 голос
/ 17 марта 2015

Чтобы лучше понять, что происходит, я создал пример ниже. Решение должно основываться на 1. list.AddRange, 2. затем переназначить список на что-то другое:

List<int> list1 = new List<int>{1,4, 8};
List<int> list2 = new List<int> { 9, 3, 1 };
//this will cause compiler error "AddRange cannot convert source type void to target type List<>"
//List<int> list3 = list1.AddRange(list2); 
//do something like this:
List<int> list3 = new List<int>();
list3.AddRange(list1);
list3.AddRange(list2);
0 голосов
/ 07 октября 2009

Вы присваиваете результат AddRange для c.CategoryIDList, а не сам новый список.

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