LINQ:检查NullReferenceException

时间:2010-08-18 06:34:32

标签: asp.net linq

在下面的代码中,如何以“良好实践”的方式检查空引用异常?

if (primaryMenu.ChildNodes.Any(p=>VirtualPathUtility.GetFileName(p.SiteURL).Equals(selectedPage)))
{
   primaryMenuTab.Attributes.Add("class", "current");
}

我现在这样做的方式是(但是JetBrain ReSharper不会接受它,并在下面的部分继续警告我:VirtualPathUtility.GetFileName(p.SiteURL),这是可以理解的),

if (primaryMenu.ChildNodes.Any(p=> p.SiteURL != null && VirtualPathUtility.GetFileName(p.SiteURL).Equals(selectedPage)))
{
   primaryMenuTab.Attributes.Add("class", "current");
}

菜单具有以下结构,

public class MultiLevelMenuNodeList
 {
  public string Name { get; set; }
  public string Permission { get; set; }
  public string SiteURL { get; set; }
  public string Visibility { get; set; }
  public List<SingleLevelMenuNodeList> ChildNodes { get; set; }
 }

 public class SingleLevelMenuNodeList
 {
  public string Name { get; set; }
  public string Permission { get; set; }
  public string SiteURL { get; set; }
  public string Visibility { get; set; }
  public string TabPosition { get; set; }
 }

提前感谢您提出建议和提示。我有点沉迷于stackoverflow:)

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案就是使用==这是空的安全:

if (primaryMenu.ChildNodes.Any(p =>
        VirtualPathUtility.GetFileName(p.SiteURL) == selectedPage))

(假设GetFileName本身可以处理空输入;否则将第一次空检查放回去。)