2

megaItemsには 4 つItemInfoの s があります。

IEnumerable<ItemInfo> megaItems;

以下の行のいずれかを実行した後、0 ItemInfosがあります

var array = megaItems.ToArray();
//var array = megaItems.Cast<ItemInfo>().ToArray();
return array;

この変換を適切な方法で行うには?

4

3 に答える 3

4

Cast(OfTypeとは異なり)はアイテムを削除しないので、おそらくそうではないと推測できます。私の推測では、「メガアイテム」は実際には後続の反復中に異なる結果を報告していると思います(非常に可能です。リンクから、それらを反復するとロードされる可能性があります。したがって、ロードされないことはなくなります)。私たちがそうするなら、私は推測します:

var x = megaItems.ToArray();
var y = megaItems.ToArray();

次に(私の推測では)xの長さは4、yの長さは0です。この場合は、2回読み取るのを避けるか、最初に出力をバッファリングしてください。

于 2013-02-24T13:37:37.850 に答える
1

クラスの オーバーライドGetHashCode()とクラスによって問題が解決する場合がありますEquals(object obj)ItemInfo

于 2013-02-24T13:46:07.457 に答える
0

配列はおそらく空ではありません。クイックウォッチで見る代わりにアイテムを使ってみてください。これはMSDNからの引用です

このメソッドは、遅延実行を使用して実装されます。即時の戻り値は、アクションを実行するために必要なすべての情報を格納するオブジェクトです。このメソッドによって表されるクエリは、GetEnumerator メソッドを直接呼び出すか、Visual C# の foreach または Visual Basic の For Each を使用して、オブジェクトが列挙されるまで実行されません。

于 2013-02-24T13:27:43.740 に答える