2

为什么这段代码不起作用?

public static IList<float> CreateModifiedList(IList<float> list)
{
    IList<float> modifiedList= list.Aggregate(new List<float> (), (l, item) =>l.Add(++item));

    return modifiedList;
}

当我尝试使用 Mono 编译它时,出现以下错误:

错误 CS0029:无法隐式转换类型void' to System.Collections.Generic.List'

4

3 回答 3

1

它不起作用,因为l.Add(++item)没有返回您的聚合(浮动列表) - 它返回void. 第二个参数应该是 type Func<List<float>, float, List<float>>。更改代码以返回聚合变量:

(l, item) => { l.Add(++item); return l; }

顺便说一句,您正在做的事情可以通过这种方式实现:

IList<float> modifiedList = list.Select(item => ++item).ToList();
于 2012-10-29T14:01:11.367 回答
1

改变

l.Add(++item)

{ l.Add(++item); return l; }

因为您需要在聚合的后面返回一个列表。

于 2012-10-29T14:03:45.787 回答
0

根据 的签名IEnumerable.Aggregate,第二个参数应该是Func<TSource, TSource, TSource>- 在您的情况下,(float, float) => float. ButList.Add是一个void函数,并且不返回一个float. 因此编译错误。

于 2012-10-29T14:04:57.377 回答