【发布时间】:2011-11-09 12:02:44
【问题描述】:
我有两个对象声明为IEnumerable<DateTime> xVal 和IEnumerable<double> yVal。
然后我的程序在哪里:
var xVals = from p in result where p.chemical == "Benzene" select p.SampDate_Name;
var yVals = from p in result where p.chemical == "Benzene" select p.PCL;
然后我正在尝试以下任务:
xVal = xVals as IEnumerable<DateTime>;
yVal = yVals as IEnumerable<double>;
上面的代码将xVal和yVal设置为null。
谁能解释这里出了什么问题?非常感谢您的帮助。
谢谢。
有一点是肯定的:输入不为空。所以 xVals 和 yVals 在我调试时是非空的。我还可以遍历它们以获取每个内容。 当我回来并发布我的发现时,我会尝试其他建议。非常感谢大家的回复。
这里的问题是 LINQ 是惰性执行的,它会在你执行 foreach 或 ToList/ToArray/ToDictionary 时执行。我的代码中的两个 linq 查询在分配完成之前没有执行。因此 xVal 和 yVal 被设置为空。 感谢大家的帮助。
【问题讨论】:
-
调试器告诉你什么 (xVals as IEnumerable
).ToString(); ? -
当您将鼠标悬停在
var关键字上时,它会说什么? -
将鼠标悬停在 var 关键字上会告诉我们: IEnumerable
和 IEnumerable 分别。因此,调试器在执行 Linq 时正在转换为正确的类型。所以我的问题是 IEnumerable 是什么意思...这似乎是问题所在。 -
(xVals as IEnumerable
).ToString() 引发运行时错误,提示“对象引用未设置为对象的实例”。当 xVals 设置为 Linq 查询的结果时,我不知道为什么会这样。
标签: c# .net ienumerable variable-assignment