无法使用var和foreach将void分配给隐式类型的局部变量

ton*_*nni 7 c# foreach lambda var

我正在尝试列出我的表单中的所有按钮名称以列出代码

var v = new List<Form1>() { this }.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
Run Code Online (Sandbox Code Playgroud)

并总是得到错误

无法将void分配给隐式类型的局部变量

如何绕过那个?

Hab*_*bib 15

Foreach返回void这就是您收到错误的原因.您在作业右侧的陈述不会返回任何内容.您可以在两个语句中执行相同的操作,例如:

var v = new List<Form1>() { this };
v.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });
Run Code Online (Sandbox Code Playgroud)

在您当前的代码中,您正在创建一个新的List<Form1>,然后迭代列表中的每个项目,但您没有返回任何内容.

正如Jon Skeet在评论中指出的那样,它不会对名单产生任何影响.我想你是想从你可以做的表单列表中获取所有按钮:

var allButtons = v.SelectMany(r => r.Controls.OfType<Button>()).ToList();
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

我怀疑你真的找Where-只是打电话ContainsForEach通话是不会为你做任何事情.同样,如果您对按钮感兴趣,我认为您并不真正在寻找表单列表.我怀疑你可能在寻找:

var buttons = this.Controls.OfType<Button>().ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,这不会进入嵌套控件 - 如果您需要这样做,您将需要一些递归的东西.(您可能能够找到其他问题要求...我们不知道这是WinForms,WebForms还是别的......这没有帮助...)