表达式方法不能直接调用foreach

问题描述:

如何用表达式方式描述这样的方法体?表达式方法不能直接调用foreach

void SomeMethod() => 
    foreach(int value in ListOfInt) 
    collect += count; 
+1

其中'collect'和'count'来自哪里?班级成员? – qxg

+0

@qxg,与'ListOfInt'相同的地方 – Jodrell

您可以改用ForEach方法作为expression-body。现在你的表情看起来像这样:

void SomeMethod() => ListOfInt.ForEach(value => {collect+=count;}); 
+0

'列表 .ForEach()'不是LINQ的一部分。 – svick

+0

你说得对,我编辑了我的答案。 –

最简单的解决方案是不使用表达式体例如

void SomeMethod() 
{ 
    foreach(int value in ListOfInt) 
    collect += count; 
} 

顾名思义,它首先是一个表达式。表达式被评估为一个值,而你的SomeMethod没有。你可以争辩说它确实返回void,它在C#中是有效的。关键是do表达体方​​法使你的代码更具可读性。如果没有,请不要使用它。

直接转换为表达体方法,而不是简化当前代码更有意义。鉴于仅在问题的代码,它可以如果计数从值来计算要写入

collect += ListOfInt.Count() * count; 

,那么它可以是

collect += ListOfInt.Select(value => ...calculate count ...).Sum(); 

或杠杆Enumerable.Aggregate为复杂的逻辑。

诀窍是将foreach语句转换为表达式。然后将整个方法转换为表达式更容易。