我试图列出我的表单中的所有按钮名称以列出代码
var v = new List<Form1>() { this }.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
并始终收到错误
无法将void分配给隐式类型的局部变量
如何绕过它?
答案 0 :(得分:14)
Foreach
会返回void
,这就是您收到错误的原因。您在作业右侧的陈述不会返回任何内容。您可以在两个语句中执行相同的操作,例如:
var v = new List<Form1>() { this };
v.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
在您当前的代码中,您正在创建一个新的List<Form1>
,然后迭代列表中的每个项目,但您没有返回任何内容。
正如Jon Skeet在评论中指出的那样,它不会对名单产生任何影响。我想您正试图从您可以执行的表单列表中获取所有按钮:
var allButtons = v.SelectMany(r => r.Controls.OfType<Button>()).ToList();
答案 1 :(得分:5)
我怀疑你真的在寻找Where
- 只是在Contains
来电中致电ForEach
并不会为你做任何事情。同样,如果您对按钮感兴趣,我也不会认为您正在寻找表单的列表。我怀疑你可能在寻找:
var buttons = this.Controls.OfType<Button>().ToList();
请注意,这不会进入嵌套控件 - 如果你需要这样做,你需要一些递归的东西。 (你很可能会找到其他问题......我们不知道这是不是WinForms,WebForms,还是别的......)