如果我没记错的话,Linq的.Aggregate
就像其他语言中的reduce()
一样,不是吗?
无论如何,我正在尝试:
var tags = new[] { "a", "b", "c", ... };
tag.Rule = tags.Aggregate((x, y) => ToTerm(x) | y);
但这不会编译,因为我的lambda的返回类型必须是字符串。那么我怎样才能使它工作呢?
我知道它看起来很有趣,因为它的类型(这将成为反讽语法),但是您真正需要知道的是
ToTerm()
返回一个KeyTerm
,并且KeyTerms
可以或可以一起构成一个BnfExpression
,这是tag.Rule所期望的。 最佳答案
您正在调用Aggregate<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>)
重载,该重载将序列中的第一个值用作初始累加器值。
如果希望累加器的类型与序列中的元素不同,则需要自己指定初始累加器值:
tag.Rule = tags.Aggregate(BnfExpression.Empty, (x, y) => ToTerm(x) | y);
关于c# - 如何通过将所有元素加或在一起来简化列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4987878/