C# 错误:无法隐式转换类型';无效';至';System.Collections.Generic.List';

C# 错误:无法隐式转换类型';无效';至';System.Collections.Generic.List';,c#,asp.net,C#,Asp.net,我正在尝试使用该控件从.aspx设置.ascx控件的属性 因此,在我的.aspx中有一个控件,我有以下代码试图设置embedded.ascx的ItemsList属性: Item item = GetItem(itemID); myUsercontrol.ItemList = new List<Item>().Add(item); Item-Item=GetItem(itemID); myUsercontrol.ItemList=新建列表().Add(项); 我试图设置的.ascx

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

因此,在我的.aspx中有一个控件,我有以下代码试图设置embedded.ascx的ItemsList属性:

Item item = GetItem(itemID);
myUsercontrol.ItemList = new List<Item>().Add(item);
Item-Item=GetItem(itemID);
myUsercontrol.ItemList=新建列表().Add(项);
我试图设置的.ascx中的属性如下所示:

public List<Item> ItemsList
{
   get { return this.itemsList; }
   set { this.itemsList = value; }
}
公共列表项目列表
{
获取{返回this.itemsList;}
设置{this.itemsList=value;}
}
错误:无法将类型“void”隐式转换为“System.Collections.Generic.List”

所以我不明白它作为财产的一部分会变得无效?…奇怪

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

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

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

mycontrol.ItemList = new List<Item>();
mycontrol.ItemList.Add(item);
mycontrol.ItemList=new List();
mycontrol.ItemList.Add(项目);
或使用:

mycontrol.ItemList=新列表{item};

创建
列表后,您将立即调用Add on,这是一个返回void的方法。无法将其转换为ItemList.ItemList的类型

您应该这样做:

var list = new List<Item>();
list.Add(item);
ItemList.ItemList = list;
var list=newlist();
列表。添加(项目);
ItemList.ItemList=列表;

只要在用户控件上实例化了
ItemList
,您就可以执行
usercontrol.ItemList.Add(item)
Add方法不会返回对列表的引用。您必须分两步执行此操作:

ItemListt.ItemList = new List<Item>();
ItemListt.ItemList.Add(item);
ItemListt.ItemList=new List();
ItemListt.ItemList.Add(item);
或者,在将引用放入属性之前,使用局部变量保存引用:

List<Item> list = new List<Item>();
list.Add(item);
ItemListt.ItemList = list;
List List=新列表();
列表。添加(项目);
ItemListt.ItemList=列表;
新建列表()。添加(项目);
此行返回void

尝试:

var list=newlist();
列表。添加(项目);
ItemListt.ItemList=列表;

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

有时候,这是因为你没有写完一行,但它仍然可以编译,错误只会出现在下一行,如果你不注意的话,这可能会造成混淆/误导。例如:

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”,而实际上这并不是实际问题,这可能会让你们中的一些人感到头疼。

我用new关键字创建了一个列表的新实例,为什么Add与重新创建我已经指定的新实例有任何关系?我只是在列表中添加内容array@cofffeeaddict:您正试图设置一个属性,该属性需要列表的实例。
Add
方法无效。我给了它一个实例…带有new List..new关键字。我假设我这样做的方式是新建一个新实例,然后我只是添加一个Add,将该项添加到的新实例中List@coffeeaddict:您期望的是一种流畅的界面,
列表的情况并非如此。添加
@coffeeaddict:I多次刷新页面。但我看不到代码有任何变化。问题仍然在于您使用的
Add
方法返回一个空值。改用集合初始值设定项<代码>新列表(){item}(我希望这个语法是正确的)。为什么ItemList需要在我已经实例化过的地方以外的任何地方实例化呢。我使用了新的关键字,它已经是一个实例了!正确,但List.Add()方法的返回类型为void,因此无法将其分配给mycontrol.ItemList()。您必须在另一行上分别对其进行初始化,或者使用集合初始值设定项。如果您已经执行了实例化,我的答案适用。您很幸运。错误地点击了plus1。
List<Item> list = new List<Item>();
list.Add(item);
ItemListt.ItemList = list;
new List<Item>().Add(item);
var list = new List<Item>();
list.Add(item);
ItemListt.ItemList = list;
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