当我尝试使用XML制作下拉列表时,我的项目出现问题。当我打电话给Xdocument.element("Root")
时,重新分析的人告诉我可能的' System.NullReferenceException'而且我不知道为什么
这是我的代码
public JsonResult LoadProvince()
{
var xmlDoc = XDocument.Load(Server.MapPath(@"~/assets/client/data/Provinces_Data.xml"));
var xElements = xmlDoc.Element("Root").Elements("Item").Where(x=>x.Attribute("type").Value=="province"); //here is the line I got the NullReferenceException
var list = new List<ProvinceModel>();
ProvinceModel province = null;
foreach (var item in xElements)
{
province = new ProvinceModel();
province.ID = int.Parse(item.Attribute("id").Value);
province.Name = item.Attribute("value").Value;
list.Add(province);
}
return Json(new
{
data=list,
status = true
});
}
这是我的XML文件的类型
<Root>
<Item id="" type="" value=""></Item>
<Item id="101" type="province" value="POI">
<Item id="10151" type="district" value="ABC">
<Item id="1015149" type="precinct" value="XYZ"/>
<Item id="1015135" type="precinct" value="LKJ"/>
<Item id="1015139" type="precinct" value="TYU"/>
</Root>
有什么好主意帮我解决这个问题吗?
答案 0 :(得分:0)
因为ReSharper并不确切地知道你在做什么,并且只检测到你正在调用对象上的方法,如果方法调用更高,那么该链上的方法可能为null。就这些。你可以忽略它。或者,如果需要,可以使用条件空运算符(?)。
答案 1 :(得分:0)
因为您的XML无效?我制作了一个示例项目,当我将XML修改为以下内容时:
el[0].removeEventListener('click', click)
当我在控制台应用程序中执行以下代码时:
el.unbind('click');
我没有问题。 ReSharper对&#34; xmlDoc.Element(&#34; Root&#34;)&#34;感到紧张。但程序运行得很好。
如果您想知道输出是:
<Root>
<Item id="" type="" value=""/>
<Item id="101" type="province" value="POI"/>
<Item id="10151" type="district" value="ABC"/>
<Item id="1015149" type="precinct" value="XYZ"/>
<Item id="1015135" type="precinct" value="LKJ"/>
<Item id="1015139" type="precinct" value="TYU"/>
</Root>
另外,你不需要.Element(&#34; Root&#34;)。做XDoc.Root更好。
答案 2 :(得分:0)
Resharper试图提供帮助。它并不一定意味着你做错了什么。
XDocument.Element
可能如果找不到指定的元素,则返回null。 Resharper实际上并不知道XML文件的样子。它试图告诉您,您没有处理可能返回null的情况,这会导致NullReferenceException
。
如果您可以保证它永远不会为空引用,那么您可以忽略该警告。如果某人可以上传XML文件而你只是认为它结构合理,那么你可能想要处理这种情况,例如:
var root = document.Element("Root");
if (root == null)
{
//handle null here
}