You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ForEachAsync时出现CS0103错误:Lambda参数“c”未识别

解决CS0103错误:Lambda参数“c”找不到的问题

嘿,先看你修改后的代码,问题其实很明显:

_appDbContext.Categories.ForEachAsync(c => _categoriesDictionary.Add(c.Id, c.CategoryName)));

直接触发错误的原因:多了一个多余的括号

你在ForEachAsync调用的结尾多写了一个闭合括号!正确的写法应该是:

await _appDbContext.Categories.ForEachAsync(c => _categoriesDictionary.Add(c.Id, c.CategoryName));

这个多余的括号把编译器搞懵了——它没法正确识别Lambda表达式的范围,自然就找不到你定义的参数c,所以抛出了CS0103错误。这也是为什么你其他地方的Lambda表达式能正常工作:那些代码没有这种语法错误,编译器能正确解析参数的上下文。

还有两个重要的坑要避开

除了这个语法错误,还有两个点得提醒你:

  • 异步方法必须用await等待:ForEachAsync是异步方法,如果你直接调用不加await,会导致异步操作没被等待,很可能引发线程问题或者数据不一致的情况。
  • Dictionary不是线程安全的:Dictionary<int, string>本身不是线程安全的集合,而ForEachAsync内部是异步遍历,可能会在多个线程里执行Add操作,这会触发竞态条件,甚至直接抛出异常。如果你的分类数据量不大,更稳妥的做法是先把数据同步拉取到本地列表,再填充字典:
var categories = await _appDbContext.Categories.ToListAsync();
foreach (var category in categories)
{
    _categoriesDictionary.Add(category.Id, category.CategoryName);
}

这样既解决了语法错误,也保证了代码的安全性和正确性。

内容的提问来源于stack exchange,提问作者ejdrian313

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:19:20