C# 无法将void分配给带有var和foreach的隐式类型局部变量
我正在尝试用代码列出表单中的所有按钮名称C# 无法将void分配给带有var和foreach的隐式类型局部变量,c#,foreach,lambda,var,C#,Foreach,Lambda,Var,我正在尝试用代码列出表单中的所有按钮名称 var v = new List<Form1>() { this }.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); }); var v=new List(){this}.ForEach(x=>{x.GetType().Name.Contains(typeof(Button.Name);}); 而且总是会出错 无法将void赋值给隐式类型的局部变量 如何绕
var v = new List<Form1>() { this }.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
var v=new List(){this}.ForEach(x=>{x.GetType().Name.Contains(typeof(Button.Name);});
而且总是会出错
无法将void赋值给隐式类型的局部变量
如何绕过它?
Foreach
返回void
,这就是为什么会出现错误。你在作业右侧的陈述没有返回任何内容。您可以在以下两个语句中执行相同的操作:
var v = new List<Form1>() { this };
v.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
var v=newlist(){this};
v、 ForEach(x=>{x.GetType().Name.Contains(typeof(Button.Name);});
在当前代码中,您正在创建一个新的列表
,然后迭代列表中的每个项目,但您不会返回任何内容
正如Jon Skeet在评论中指出的那样,这不会对名单产生任何影响。我猜您正在尝试从您可以执行的表单列表中获取所有按钮:
var allButtons = v.SelectMany(r => r.Controls.OfType<Button>()).ToList();
var allButtons=v.SelectMany(r=>r.Controls.OfType()).ToList();
我怀疑您真的在寻找的位置
-在ForEach
调用中调用Contains
对您没有任何帮助。同样,如果您对按钮感兴趣,我认为您并不是在寻找表单列表。我怀疑您可能正在寻找:
var buttons = this.Controls.OfType<Button>().ToList();
var buttons=this.Controls.OfType().ToList();
请注意,这不会进入嵌套控件中-如果需要这样做,您将需要一些递归的东西。(你很可能会找到其他问题来问这个问题……我们不知道这是WinForms、WebForms还是其他东西……这没有帮助……你不能这样做。在
v
上调用foreach,而不是在构造的对象上,因为foreach返回void,然后您尝试将void分配给variable@tonni:不可以。您可以在使用成员之前使用括号排序分配,但不能使用初始化。@habib您的更新不起作用,但我理解您的目的say@tonni嗯,什么不起作用,它应该为您的列表中的所有项目返回一个列表
,您是否收到任何错误/异常?@Habib--不包括linq,现在可以完美工作:),thnx寻求帮助