如何在 .net 中检查 lambda 表达式中的空引用
How to check null reference in lambda expression in .net
我正在使用以下代码处理 xml 文件,但是如何检查我曾经得到的空引用异常
var main = System.Xml.Linq.XDocument.Load("1.xml");
string localcellid = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBCell_eNodeB"))
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "LocalCellId"))
.Attribute("value").Value;
string eNodeBId = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeB_eNodeB"))
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBId"))
.Attribute("value").Value;
正如 Nikosi 所说,每个 FirstOrDefault
都有可能 return null
,你需要考虑到这一点。
你可以提前检查(我只添加了1个检查作为示例):
var eNodeBCell_eNodeB = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBCell_eNodeB"));
if (eNodeBCell_eNodeB != null)
{
string localcellid = eNodeBCell_eNodeB
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "LocalCellId"))
.Attribute("value").Value;
}
或者您可以使用空条件运算符 (?.
):
string eNodeBId = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeB_eNodeB"))
?.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBId"))
?.Attribute("value").Value;
无论如何,您稍后需要检查这些值的空值。
我正在使用以下代码处理 xml 文件,但是如何检查我曾经得到的空引用异常
var main = System.Xml.Linq.XDocument.Load("1.xml");
string localcellid = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBCell_eNodeB"))
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "LocalCellId"))
.Attribute("value").Value;
string eNodeBId = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeB_eNodeB"))
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBId"))
.Attribute("value").Value;
正如 Nikosi 所说,每个 FirstOrDefault
都有可能 return null
,你需要考虑到这一点。
你可以提前检查(我只添加了1个检查作为示例):
var eNodeBCell_eNodeB = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBCell_eNodeB"));
if (eNodeBCell_eNodeB != null)
{
string localcellid = eNodeBCell_eNodeB
.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "LocalCellId"))
.Attribute("value").Value;
}
或者您可以使用空条件运算符 (?.
):
string eNodeBId = main.Descendants()
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeB_eNodeB"))
?.Descendants("parameter")
.FirstOrDefault(x => x.Attributes().Any(a => a.Value == "eNodeBId"))
?.Attribute("value").Value;
无论如何,您稍后需要检查这些值的空值。