Ошибка: не может неявно преобразовать тип 'void' в 'System.Collections.Generic.List'

Я пытаюсь установить свойство моих .ascx элементов управления из .aspx, используя этот элемент управления.

Итак, в одном из моих .aspx, у которого есть этот элемент управления, у меня есть следующий код, пытающийся установить свойство ItemsList моего встроенного .ascx:

Item item = GetItem(itemID);
myUsercontrol.ItemList = new List<Item>().Add(item);

Свойство в .ascx, которое я пытаюсь установить, выглядит следующим образом:

public List<Item> ItemsList
{
   get { return this.itemsList; }
   set { this.itemsList = value; }
}

Ошибка. Невозможно неявно преобразовать тип 'void' в 'System.Collections.Generic.List'

Итак, я не понимаю, где это становится недействительным как часть свойства?... странно.

Ответ 1

Вы не можете этого сделать, потому что функция Add возвращает void, а не ссылку на список. Вы можете сделать это:

mycontrol.ItemList = new List<Item>();
mycontrol.ItemList.Add(item);

или используйте инициализатор коллекции:

mycontrol.ItemList = new List<Item> { item };

Ответ 2

ItemListt.ItemList = new List<Item>().Add(item);

Возвращает ли метод Add экземпляр класса, основанного на списке?

EDIT: Нет, см. ссылку для документации по List<T>.Add

EDIT2: попробуйте написать этот фрагмент кода и посмотреть, что является возвращаемым значением метода Add.

List<Item> items = new List<Item>();
var modifiedList = items.Add(myItem);

Вы увидите, что код должен завершиться с ошибкой Add, потому что он возвращает void.

Ответ 3

После создания List<Item> вы сразу вызываете "Добавить" на нем, что является методом, возвращающим void. Это не может быть преобразовано в тип ItemList.ItemList.

Вместо этого вы должны сделать это:

var list = new List<Item>();
list.Add(item);
ItemList.ItemList = list;

Ответ 4

new List<Item>().Add(item);

Эта строка возвращает void.

Try:

var list = new List<Item>();
list.Add(item);
ItemListt.ItemList = list;

Ответ 5

Пока ItemList создается на вашем пользовательском контроле, вы можете просто сделать UserControl.ItemList.Add(item)

Ответ 6

Метод Add не возвращает ссылку на список. Вы должны сделать это в два этапа:

ItemListt.ItemList = new List<Item>();
ItemListt.ItemList.Add(item);

Альтернативно используйте локальную переменную, чтобы сохранить ссылку, прежде чем поместить ее в свойство:

List<Item> list = new List<Item>();
list.Add(item);
ItemListt.ItemList = list;

Ответ 7

Для тех, кто может прийти сюда из-за ошибки в Google:

Иногда это потому, что вы не закончили писать строку, но она все равно компилируется, и ошибка появляется только на следующей строке, что может сбить с толку/ввести в заблуждение, если вы не обратите внимание. Например:

var foo = 33;
var bar = 

// Note that I never finished the assignation (got distracted, saved and it compiled)
//
// Some unrelated code returning "void" (another example would be List.Add)
await SomethingAsync(); // -> Error shows up here instead

Возможно, некоторые из вас избавят вас от головной боли, пытаясь понять, почему "ожидание моей функции" вызывает "Невозможно преобразовать пустоту в X", хотя на самом деле это не актуальная проблема.