检查空引用时linq NullReferenceException

时间:2010-05-10 19:48:54

标签: c# linq-to-objects

我有以下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 个答案:

答案 0 :(得分:3)

可能存在FileInputItem.Folder为空的情况(这将导致带有“Path.GetDirectoryName(f.Folder).ToLower()。Trim()”)的异常,并且这些情况恰好与其中的情况一致FileInputItem.Expression为null。

尝试将“f.Folder!= null”添加到where子句的开头,看看是否能解决问题。如果是,请确定在Folder为null时如何处理这些情况。

答案 1 :(得分:0)

你也可以尝试String.IsNullOrEmpty(f.Expression)

答案 2 :(得分:0)

这有帮助吗?

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;