2017-09-18 21 views
-1

小さな質問。foreach内のアイテムのリストをループする標準的な方法

どちらがループするのが良いか、どちらも同じですか。

アプローチ1:

foreach(var listitem in GetItems()) 
{ 
} 

アプローチ2:

var listItems = GetItems(); 

foreach(var listitem in listItems) 
{ 
} 

private List<myclass> GetItems() 
{ 
    //get items from database 
} 

私は、私の場合は、実行時間に差を見つけることができませんでしたが、その後わずか数百のレコードがデータベースにありました。

私が知りたいのは、アプローチ1では、リスト内の各アイテムに対してGetItems()を実行するのか、それとも1回だけ実行するのかということです。

+1

どちらも同じです。 'listItems'を複数の場所で使いたいので、メソッドを複数回呼び出す必要がないようにするには、2番目の方法を使います。 –

+1

これは同じです。もちろん、毎回実行されるわけではありません。それは1つの 'GetItems'呼び出しと' while'ブロックにコンパイルされます。 –

+1

'GetItems()'は一度だけ実行されます。 2番目のアプローチはメソッド全体のライフタイムを持つ 'listItems'オブジェクトを作成して保持するため、最初のアプローチをお勧めします。 CLRがそれを呼び出すか、明示的にコード内で呼び出された場合にのみ、ガーベッジ・コレクションが収集されます。 – praty

答えて

-1

アプローチ1では、メソッド 'GetItems()'は1回だけ実行されます。 foreachループコードをデバッグしようとすると、実際に自分自身で見ることができます。

+0

どちらも、一度だけそのメソッド呼び出しを実行します。 –

+0

それは明白なことです。アプローチ2であっても、1回だけ実行されます。 –

+0

なぜdownvote?アプローチ1についての質問がありましたが、私はその点までありました。私はポイントについて心配していない、あなたは本当にこの答えが正しくないと思うなら、親切に答えが何であると思うか説明してください。アルテストはあなたのポイントを正当化します。 – Dinny

関連する問題