2012-03-20 14 views

答えて

1

Enumerable.SelectはLazyです。 これを試してみて、あなたのブレークポイントが

hashedUrlDataList.Select(mDalHashedUrlData.Save).ToList(); 

または基本をキャッチされている場合を教えてください:

hashedUrlDataList.Select(mDalHashedUrlData.Save).GetEnumerator().MoveNext() 

あなたは、少なくとも一つの要素を持っている場合、それはちょうど動作します。

あなたもそれを行うことができます。

List<HashedUrlData> hashedUrlDataList = new List<HashedUrlData>(); 
hashedUrlDataList.ForEach(Save); 
+0

ToList()を使わないで強制的に呼び出しを行うには? –

+0

ToListなしで、または列挙なしに強制したいですか?どのようにそれを列挙する必要があります。 HashedUrlDataを持たない場合、Saveメソッドを呼び出す方法は? 最も基本的な呼び出しは、hashedUrlDataList.Select(mDalHashedUrlData.Save).GetEnumerator()です。MoveNext(); –

5

あなたのメソッドは、宣言時にSelect()の結果を列挙するときに呼び出されます。

+0

ToList()を使わないで強制的に呼び出しを行うには? –

+0

これを列挙してください!あなたのコードは実行したい式の定義に過ぎませんが、実際には必要なときだけ実行されます。たとえば、Select()の結果を列挙すると、各要素に対して関数が呼び出されます。 ToList()を呼び出すと、すべての要素を含むリストを作成することになります。あなたはそれをすることができますが、おそらくあなたはそれを必要としません。 –

+0

foreach(hashedUrlDataList.Select(mDalHashedUrlData.Save)のvarアイテム)item.ToString(); –

0

hashedUrlDataList.Select(mDalHashedUrlData.Save).Any(); 

どれを()私が何をしたいことはあると思いGetEnumeratorメソッド()のMoveNext()

という同じことを行います。 LINQはデータを照会するためのものです。副作用を引き起こすことは意図されていません。

あなたはそれを返しHashedUrlDataインスタンスよりもあなたSave方法の側efectsでより興味があるなら、あなたは最終的に返された値を使用する場合は、あなたが本当に

foreach (HashedUrlData h in hashedUrlDataList) 
{ 
    h.Save(); 
} 

を呼び出すべきであると、これはちょうどです中間段階/デバッグ段階、そして是非LINQを使用してください。 Saveは返された各値にアクセスするときにのみ呼び出されることに注意してください。他の答えが示すように、列挙子全体を列挙する他のものを呼び出します。

関連する問題