我有两个对象声明为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。谁能解释这是怎么回事?我非常感谢您的帮助。
谢谢。
可以肯定的一件事:输入不为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/