我有以下情况:
if(xml.Descendants(ns + "Children").FirstOrDefault() != null)
{
XElement children = xml.Descendants(ns + "Children").FirstOrDefault();
}
有没有办法可以检查null并同时分配值,而不必两次搜索值,类似于:
//Not sure if this is correct.
if (XElement children = xml.Descendants(ns + "Children").FirstOrDefault() != null)
{
}
答案 0 :(得分:9)
A variable assignment also returns the value。因此,以下形式的语法将执行:
SomeType someVariable;
if ((someVariable = valueToAssign) != null)
{
// valueToAssign was not null
}
在你的情况下:
XElement children;
if ((children = xml.Descendants(ns + "Children").FirstOrDefault()) != null)
{
}
答案 1 :(得分:4)
我会这样做:
XElement children = xml.Descendants(ns + "Children").FirstOrDefault();
if(children != null)
{
//use children
}
答案 2 :(得分:2)
你可以做到
XElement children = xml.Descendants(ns + "Children").FirstOrDefault();
然后检查null
if (children != null) {...}
答案 3 :(得分:1)
您可以在单个语句中分配然后测试指定的值(但不要声明它):
XElement children = null;
if ((children = xml.Descendants(ns + "Children").FirstOrDefault()) != null)
{
}
但这在功能上与之后的分配和测试相同:
var children = xml.Descendants(ns + "Children").FirstOrDefault();
if (children != null)
{
}
我赞成后者,因为我认为它更具可读性(也允许你使用var
)。
将空值赋值给变量本身永远不会产生错误(假设这只是一个标准的局部变量),后续使用该变量可能会产生错误。因此,假设xml
本身不为空,则上述任一解决方案都是安全的。
答案 4 :(得分:0)
你可以这样做:
null != children = xml.Descendants(ns + "Children").FirstOrDefault()
答案 5 :(得分:0)
您可以在C#7中使用模式匹配
if(xml.Descendants(ns + "Children").FirstOrDefault() is XElement children)
{
xml.Descendants(ns + "Children").FirstOrDefault();
}
这是一个较晚的答复,但是这个问题出现在Google的顶部,并且缺少C#7答案