Ошибка: не может неявно преобразовать тип '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", хотя на самом деле это не актуальная проблема.