2

私は頭が良くて、このコード サンプルのようなものを書きたいと思っていました。また、2 回目の列挙を行わずに配列を埋めるためのクリーンで効率的な方法のようにも思えました。

int i = 0;
var tickers = new List<string>();
var resultTable = results.Select(result => new Company
{
      Ticker = tickers[i++] = result.CompanyTicker,
});

これを行う別の方法はあまり気にしません。なぜなら、これは明らかに for ループで簡単に達成できるからです。このスニペットが機能しない理由tickers.Count = 0、つまり、コードの実行後、100 以上の結果があるにもかかわらず、もっと興味があります。この予期しない動作が発生する理由を誰か教えてもらえますか?

4

3 に答える 3

8

.ToArray()最後にorを使用するなど、クエリを繰り返す必要がありますToList()。現在、クエリを作成したばかりで、まだ実行されていません。

表示されることがあります: LINQ と遅延実行

IndexOutOfRangeさらに、 List にはアイテムがないため、コードは例外をスローする必要があると思います。

于 2013-07-26T18:42:44.000 に答える
2

これは、LINQ の遅延実行によるものです。クエリが実行されると (つまり、それを反復処理するとき)、リストに結果が含まれているはずです。これを行う簡単な方法は、ToArrayまたはを使用することToListです。

于 2013-07-26T18:43:37.033 に答える