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)
我怀疑你真的找Where-只是打电话Contains的ForEach通话是不会为你做任何事情.同样,如果您对按钮感兴趣,我认为您并不真正在寻找表单列表.我怀疑你可能在寻找:
var buttons = this.Controls.OfType<Button>().ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,这不会进入嵌套控件 - 如果您需要这样做,您将需要一些递归的东西.(您可能能够找到其他问题要求...我们不知道这是WinForms,WebForms还是别的......这没有帮助...)