2010-06-02 4 views
2

У меня есть код, прекрасно работающий на моей машине разработки, но при развертывании на сервере выбрасывается исключение ссылочной ссылки. Таким образом, я не могу пройти через код, но я прикрепил виновника. Но теперь я озадачен. Вот код. Вопрос ниже.IEnumerable не null, но вызов Count() приводит к исключению

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()) 

В коде выше указаны словарный запас пользовательского класса, а certs относится к типу IEnumerable. Теперь вот предел ... Первая строка, которая устанавливает метку, возвращает False, поэтому certs не является нулевым. Но вторая строка выбрасывает исключение нулевой ссылки. Как это возможно?

ответ

4

Мое предположение связано с отсроченным выполнением LINQ. Элементы перечисляются только тогда, когда вы вызываете Count(), и если ваш код в выражении терпит неудачу, вы получите исключение прямо там.

Я уверен, что по крайней мере один из staffMember, thisEvent, thisEvent.Seminar или thisEvent.Venue равны нулю.

+0

Хорошая идея! ..... – Marcel

+0

Спасибо. Ты был прав. thisEvent.Venue был null – Antony

+0

@Draak, спасибо за отзыв. Отсроченное исполнение нередко приводит к тому, что вещи происходят по-другому, чем первоначально предполагалось программистом, и поэтому я всегда рекомендую спросить себя, может ли отложенное выполнение быть причиной ваших проблем при работе с проблемами LINQ. – Lucero

Смежные вопросы