我有两个对象声明为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>;


上面的代码将xValyVal设置为null。

谁能解释这是怎么回事?我非常感谢您的帮助。

谢谢。



可以肯定的一件事:输入不为null。所以xVals和yVals是非空的,正如我调试的那样。我还可以遍历它们以获取每个的内容。
当我回来并发表我的发现时,我将尝试其他建议。非常感谢您的回复。

这里的问题是LINQ是延迟执行的,当您执行foreach或ToList / ToArray / ToDictionary时,它将被执行。在分配完成之前,我的代码中的两个linq查询没有执行。因此,xVal和yVal设置为null。
感谢您的所有帮助。

最佳答案

如果输入为null或无法执行强制转换,则as关键字会将输出设置为null。

如果使用xVal = (IEnumerable<DateTime>)xVals,则可能会收到一个异常消息,说明它无法强制转换。

MSDN description for as keyword

关于c# - IEnumerable <T>赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7289364/

10-12 05:43