2010-08-18 38 views
1

在以下代碼中,如何以「良好實踐」方式檢查空引用異常?LINQ:檢查NullReferenceException

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

我這樣做的方式是目前(但JetBrain ReSharper的doesnt't瓦納接受它,並不斷警告我以下部分: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; } 
} 

預先感謝建議和提示。我還挺越來越沉迷於計算器:)

+0

resharper顯示的警告是什麼? – shahkalpesh 2010-08-18 06:38:14

回答

3

一個簡單的解決方法就是使用==這是空安全:

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

(這是假設GetFileName本身可以用空的輸入處理;否則把你的第一個null請檢查。)

+0

@shashkalpesh它顯示可能的'System.NullReferenceException' @Jon謝謝:)我將使用它,看看它是怎麼回事。 – MSI 2010-08-18 06:50:46

+0

當我使用==時,Yup ReSharper沒有顯示任何警告。謝謝 – MSI 2010-08-18 06:57:40