Nic*_*ner 6 .net c# linq ienumerable
IEnumerable
是一个懒惰评估的查询.但显然我的理解有点瑕疵.我希望以下工作:
// e.Result is JSON from a server
JObject data = JObject.Parse(e.Result);
JsonSerializer serializer = new JsonSerializer();
// LINQ query to transform the JSON into Story objects
var stories = data["nodes"].Select(
obj => obj["node"]).Select(
storyData => storyOfJson(serializer, storyData));
// set a value on each story returned by the query
foreach (Story story in stories)
{
story.Vid = vid;
}
// run through the query again, making sure the value was actually set
foreach (Story story in stories)
{
// FAILS - story.VID is 0
Debug.Assert(story.Vid == vid);
}
Run Code Online (Sandbox Code Playgroud)
我在这里误解了什么?如何更改此查询返回的结果?
SLa*_*aks 11
每次枚举stories
变量时,Select
调用都会再次运行,从而创建一组新Story
对象.
因此,每个foreach
循环都在不同的Story
实例集上运行.
您需要通过调用强制LINQ调用只评估一次.ToArray()
.
循环生成的数组不会重新评估LINQ调用(因为它是一个普通的数组),所以你将共享同一组Story
实例.
归档时间: |
|
查看次数: |
454 次 |
最近记录: |