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

问题描述 投票:0回答:3

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

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

总是出错

不能将 void 分配给隐式类型的局部变量

如何绕过它?

c# foreach lambda var
3个回答
24
投票

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();

8
投票

我怀疑你真的在寻找

Where
- 只是在
Contains
电话中打电话给
ForEach
不会为你做任何事情。同样,如果您对 buttons 感兴趣,我认为您并不是真的在寻找 forms 列表。我怀疑您可能正在寻找:

var buttons = this.Controls.OfType<Button>().ToList();

请注意,这不会进入嵌套控件 - 如果您需要这样做,您将需要一些递归的东西。 (你很可能会找到其他问题来问这个……我们不知道这是 WinForms、WebForms 还是其他东西也无济于事……)


0
投票

这是我遇到的上述错误的正确代码形式。

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);
            }
© www.soinside.com 2019 - 2024. All rights reserved.