2016-05-02 13 views
2

が考えるのリストを表示します。何らかの理由でではなく、精神的に解析するのが簡単で、可能であれば好奇心が強いだけです。リファクタリングのforeachループは<T> .ForEach(...)

_data.ForEach(feObj => maxRows++); 
_data.ForEach(feObj => feObj.Parameters.ForEach(feParam => maxRows++)); 

それは一見による_data追加の時間を反復処理にオリジナルよりも少ない効率的であるが、これは、同じことを達成するようです。

2つの別々の行にある2つのアクションを1つのステートメントに結合する方法はありますか?

+3

を 'ForEach'はLINQのではありません。しかし、あなたは '_data.ForEach(obj => {maxRows ++; obj.Parameters.ForEach(param => maxRows ++);});' – juharr

+0

を実行することができます。 'foreach'ブロックを持つ最初のコードでは、ネストされたループがあります。 '_data.ForEach'のコードでは、順番にループを実行しています。 2つの全く異なるコード実行。 –

+0

@Drakenいいえ、 '++ 'の戻り値の型は' bool'ではないからです。 – juharr

答えて

4

これは同じループで実行できます。

_data.ForEach(feObj => 
{ 
    maxRows++; 
    feObj.Parameters.ForEach(feParam => maxRows++); 
}); 

さらに、カウントを追加するだけであれば、@Robが回答したものとして行う必要があります。他のロジックがあれば、中括弧内に置くことができます。

+0

ありがとう、カウントは例だったし、ロブの私のendgoalされていた動作します。あなたの構文(と私は元々だと思います)@ Juharrは私が実際に探していたものでした。本当にそれが私の元々のネストされたforeachループよりも見た目を変えるものではないと思います。 – Kritner

10

あなただけの和を取ることができます:

maxRows += _data.Sum(obj => 1 + obj.Parameters.Count())