Expression Bodied方法无法直接调用foreach

时间:2016-06-08 07:38:52

标签: foreach c#-6.0

我怎样才能以表达式的方式描述这样的方法体?

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

3 个答案:

答案 0 :(得分:1)

顾名思义,这首先是表达式。表达式计算为值,而SomeMethod则不计算。你可以说它确实返回void并且它在C#中有效。重点是表达体方法使您的代码更具可读性。如果没有,请不要使用它。

不是直接转换为表达式主体方法,而是简化当前代码更有意义。只给出一段有问题的代码,可以写成

collect += ListOfInt.Count() * count;

如果count是根据值计算的,那么它可以是

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

或利用Enumerable.Aggregate来处理复杂逻辑。

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

答案 1 :(得分:0)

您可以将ForEach方法用作表达式主体。现在你的表达式看起来像这样:

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

答案 2 :(得分:0)

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

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