错误:无法将类型'void'隐式转换为'System.Collections.Generic.List'

时间:2009-12-08 17:01:23

标签: c# asp.net

我正在尝试使用该控件从.aspx设置我的.ascx控件的属性。

所以在我的 .aspx 之一中有这个控件,我有以下代码试图设置我的嵌入式.ascx的ItemsList属性:

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'

所以我不知道它作为财产的一部分变得无效吗?......很奇怪。

7 个答案:

答案 0 :(得分:33)

您不能这样做,因为Add函数返回void,而不是对列表的引用。你可以这样做:

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

或使用collection initializer

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

答案 1 :(得分:1)

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

Add方法是否返回基于列表的类的实例?

编辑:不,请参阅此link了解有关List<T>.Add

的文档

EDIT2:尝试编写这段代码&amp;看看Add方法的返回值是多少。

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

您会看到,代码应该在Add失败,因为它会返回void

答案 2 :(得分:1)

创建List<Item>之后,您立即调用Add on it,这是一个返回void的方法。这不能转换为ItemList.ItemList的类型。

你应该这样做:

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

答案 3 :(得分:1)

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

此行返回void。

尝试:

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

答案 4 :(得分:0)

只要在您的usercontrol上实例化ItemList,就可以UserControl.ItemList.Add(item)

答案 5 :(得分:0)

Add方法不会返回对列表的引用。您必须分两步执行此操作:

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

或者在将引用放入属性之前使用局部变量来保存引用:

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

答案 6 :(得分:0)

对于其他可能由于谷歌搜索错误而来到这里的人:

有时是因为您没有完成写一行,但是无论如何它都会编译,并且错误仅显示在下一行,如果您不注意,可能会造成混淆/误导。例如:

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

试图弄清楚为什么“正在等待我的功能”会引发“无法将void转换为X”的事情可能真的让您有些头痛,