linq NullReferenceException при проверке нулевой ссылки - PullRequest
0 голосов
/ 10 мая 2010

У меня есть следующий запрос LINQ:

List<FileInputItem> inputList = GetInputList();
var results = from FileInputItem f in inputList
              where ( Path.GetDirectoryName(f.Folder).ToLower().Trim() == somePath
                     || Path.GetDirectoryName(f.Folder).ToLower().Trim() == someOtherPath ) 
                    && f.Expression == null
             select f;

Каждый раз, когда этот запрос выполняется, он генерирует исключение NullReferenceException.Если я удаляю условие f.Expression == null или меняю его на f.Expression != null, запрос выполняется нормально (конечно, с неверными результатами).

Соответствующие биты FileInputItem выглядят так:

[Serializable]
public class FileInputItem
{
    [XmlElement("Folder")]
    public string Folder { get; set; }

    [XmlElement("Expression")]
    public string Expression { get; set; }

    /*SNIP.  Irrelevant properties */
}

Я новичок в LINQ для объектов, поэтому я, вероятно, здесь упускаю что-то фундаментальное.В чем дело?

Ответы [ 3 ]

3 голосов
/ 10 мая 2010

Вероятно, есть случаи, когда FileInputItem.Folder имеет значение null (что может вызвать исключение с помощью «Path.GetDirectoryName (f.Folder) .ToLower (). Trim ()»), и эти случаи совпадают со случаями, когда FileInputItem.Expression имеет значение null.

Попробуйте добавить «f.Folder! = Null» в начало предложения where и посмотрите, решит ли это проблему. Если это так, определите, как вы хотите обрабатывать те случаи, когда папка пуста.

0 голосов
/ 11 мая 2010

Помогает ли это?

List<FileInputItem> inputList = GetInputList();
var results = from FileInputItem f in inputList
              where f.Folder != null && f.Expression == null
              let path = Path.GetDirectoryName(f.Folder).ToLower().Trim()
              where path == somePath || path = someOtherpath
              select f;
0 голосов
/ 10 мая 2010

Вы также можете попробовать String.IsNullOrEmpty (f.Expression)

...