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()或。ToList()目前你刚刚创建了一个查询,它还没有被执行

您可能会看到:LINQ 和延迟执行

另外,我相信您的代码应该抛出异常 for IndexOutOfRange,因为您的 List 没有任何项目。

于 2013-07-26T18:42:44.000 回答
2

这是由于 LINQ 的延迟执行。当查询被执行时(即当你迭代它时),列表应该有你的结果。一个简单的方法是使用ToArrayor ToList

于 2013-07-26T18:43:37.033 回答
1

理想情况下,Linq 应该没有副作用。

我看不出有什么会阻止这是一个两步过程:

var tickers = results.Select(r => r.CompanyTicker).ToList();

var resultTable = tickers.Select(t => new Company { Ticker = t }).ToList();
于 2013-07-26T19:27:29.157 回答