我以为我会聪明并且写出类似这样的代码示例。它似乎也是一种干净而有效的方式来填充数组,而无需再次枚举。
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多个结果。谁能告诉我为什么我会出现这种意想不到的行为?
答案 0 :(得分:8)
您需要迭代查询,例如最后使用.ToArray()
或ToList()
。目前您刚刚创建了一个查询,尚未执行。
您可能会看到:LINQ and Deferred Execution
另外,我认为您的代码应该为IndexOutOfRange
引发异常,因为您的列表没有任何项目。
答案 1 :(得分:2)
这是由于LINQ的延迟执行。当查询执行时(即当你迭代它时),列表应该有你的结果。一种简单的方法是使用ToArray
或ToList
。
答案 2 :(得分:1)
我没有看到什么会阻止这个过程分为两步:
var tickers = results.Select(r => r.CompanyTicker).ToList();
var resultTable = tickers.Select(t => new Company { Ticker = t }).ToList();