为了理解这个集合,我试图找到传入的每个数字的平方 集合。
我的代码是(当然我可以用不同的方式实现,只是为了知道铸造它,我做了一个虚拟实现)。
static void Main()
{
ICollection<int> Present = (ICollection<int>)
a.GetNumbers(new int[]{1,2,3});
foreach (int i in Present)
{
Console.WriteLine("{0}", i);
}
}
public IEnumerable<int> GetNumbers(int[] Numbers)
{
//first trial
ICollection<int> col =
Array.ForEach(Numbers, delegate { x => x * x; });
//second trial
ICollection<int> col = Array.ForEach(Numbers, ( x => x * x ));
return (IEnumerable<int>)col.GetEnumerator();
}
GetNumbers()中的两个路径中的Array.ForEach有什么问题?
我收到“允许分配和呼叫增量”。错误。
答案 0 :(得分:2)
Action
没有返回任何内容,Array.ForEach
也没有 - 但是你的lambda表达式没有,并且你试图使用Array.ForEach
的结果,尽管它是一个void方法。请改为Array.ConvertAll
,使用Converter<TInput, TOutput>
(相当于Func<TIn, TOut>
)。
或者,如果您想要探索Array.ForEach
和Action
,请执行以下操作:
Array.ForEach(Numbers, x => Console.WriteLine(x * x));
(另外,你的第一次尝试似乎是匿名方法语法和lambda语法的混合。这是行不通的。)
像这样:
int[] squares = Array.ConvertAll(numbers, x => x*x);
答案 1 :(得分:0)
这是LINQ扩展方法派上用场的学校书籍示例,为什么不这样做:
public IEnumerable<int> GetNumbers(IEnumerable<int> numbers)
{
return numbers.Select(x => x * x);
}