我正在尝试从我的表单中列出所有按钮名称以列出代码
var v = new List<Form1>() { 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); });
在您当前的代码中,您正在创建一个新的
List<Form1>
,然后遍历列表中的每个项目,但您没有返回任何东西。
正如 Jon Skeet 在评论中指出的那样,它不会对列表产生任何影响。我猜你正试图从你可以做的表单列表中获取所有按钮:
var allButtons = v.SelectMany(r => r.Controls.OfType<Button>()).ToList();
我怀疑你真的在寻找
Where
- 只是在 Contains
电话中打电话给 ForEach
不会为你做任何事情。同样,如果您对 buttons 感兴趣,我认为您并不是真的在寻找 forms 列表。我怀疑您可能正在寻找:
var buttons = this.Controls.OfType<Button>().ToList();
请注意,这不会进入嵌套控件 - 如果您需要这样做,您将需要一些递归的东西。 (你很可能会找到其他问题来问这个……我们不知道这是 WinForms、WebForms 还是其他东西也无济于事……)
这是我遇到的上述错误的正确代码形式。
public asyncTask<IDataResult<IEnumerable<PatientSpecialInstructionDto>>> Handle(GetPatientSpecialInstructionListQuery request, CancellationToken cancellationToken)
{
var dataList = await _patientSpecialInstructionRepository.GetPatientSpecialInstructionListQuery(request.ProviderId);
return new PagedDataResult<IEnumerable<PatientSpecialInstructionDto>>(dataList, dataList.Count(), request.PageNumber);
}