调用带匿名Action的ForEach编译报CS7036错误,原因是什么?
错误原因解析及解决方法
这个报错的核心问题是你混淆了C#中ForEach方法的正确调用方式:
- C#的数组类型(
T[])没有自带实例方法ForEach,你试图用arr.ForEach(...)调用的方法根本不存在。 - 编译器之所以报出
error CS7036,是因为它在尝试匹配可能的方法时,误以为你在调用某个需要action参数的方法,但实际上你调用的方法本身就不存在,所以会提示你缺少对应参数(这是编译器的误判,但根源是方法调用方式错误)。
两种正确的解决方式:
使用
Array类的静态ForEach方法
这是官方针对数组设计的遍历方法,需要把数组作为第一个参数传入:var arr = new[] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; Array.ForEach(arr, x => Console.WriteLine(x));将数组转为
List<T>后调用实例ForEach方法
如果你更习惯实例方法的写法,可以先把数组转换成List<T>(需要引用System.Linq):using System.Linq; // 记得添加这个引用 var arr = new[] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; arr.ToList().ForEach(x => Console.WriteLine(x));
内容的提问来源于stack exchange,提问作者Eleno
相关产品推荐
相关产品推荐

