IEnumerable不为null但调用Count()会导致异常

时间:2010-06-02 18:56:04

标签: asp.net vb.net

我的代码在我的开发机器上运行得很漂亮,但是当部署到服务器时会抛出空引用异常。所以,我无法单步执行代码,但我已经确定了罪魁祸首。但现在我很困惑。这是代码。问题如下。

Dim certs = From p In persons _
        Select New Certificate( _
        p.Value, _
        New CertificateData.Seminar(thisEvent.Seminar.Name, _
               thisEvent.StartDate.Value, _
               thisEvent.EndDate.Value, _
               thisEvent.Venue.City, _
               thisEvent.Venue.State, _
               New CertificateData.Instructor( _
               staffMember.Name, _
               staffMember.Titles, _
               instrSignatPath))) _
        With {.CertificateId = p.Key}

lblMessage.Text = CStr(certs Is Nothing)
lblMessage.Text = lblMessage.Text + "<br />" + CStr(certs.Count())

在上面的代码中,person是自定义类的字典,而certs是IEnumerable类型。现在这里是窘迫..设置标签的第一行返回False,因此certs不为null。但第二行抛出空引用异常。这怎么可能?

1 个答案:

答案 0 :(得分:4)

我的猜测是因为LINQ的延迟执行。只有在您调用Count()时才会枚举这些项目,如果表达式中的代码失败,您将在那里获得异常。

我非常确定staffMemberthisEventthisEvent.SeminarthisEvent.Venue中至少有一个为空。