7

我有以下情况:

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)
{

}
4

6 回答 6

14

变量赋值也返回值。因此,以下形式的语法将执行:

SomeType someVariable;
if ((someVariable = valueToAssign) != null)
{
    // valueToAssign was not null
}

在你的情况下:

XElement children;

if ((children = xml.Descendants(ns + "Children").FirstOrDefault()) != null)
{

}
于 2012-06-15T13:56:18.703 回答
4

我会这样做:

XElement children = xml.Descendants(ns + "Children").FirstOrDefault();
if(children != null)
{
    //use children
}
于 2012-06-15T14:00:24.613 回答
2

你可以做

XElement children = xml.Descendants(ns + "Children").FirstOrDefault();

然后检查 null

if (children != null) {...}
于 2012-06-15T13:56:09.773 回答
1

您可以在单个语句中分配然后测试分配的值(但不能声明它):

XElement children = null;

if ((children = xml.Descendants(ns + "Children").FirstOrDefault()) != null)
{    
}

但这在功能上与之后的分配和测试相同:

var children = xml.Descendants(ns + "Children").FirstOrDefault();

if (children != null)
{      
}

我倾向于后者,因为我认为它更具可读性(也可以让你使用var)。

将空值分配给变量本身永远不会产生错误(假设这只是一个标准的局部变量),随后使用该变量可能会这样做。xml因此,假设本身不为空,上述任一解决方案都是安全的。

于 2012-06-15T13:56:32.213 回答
0

你可以这样做:

null != children = xml.Descendants(ns + "Children").FirstOrDefault()
于 2012-06-15T13:56:16.703 回答
0

您可以在 C# 7 中使用模式匹配

if(xml.Descendants(ns + "Children").FirstOrDefault() is XElement children)
{
    xml.Descendants(ns + "Children").FirstOrDefault();
}

这是一个迟到的回应,但这个问题出现在谷歌的顶部,它缺少 C# 7 的答案

于 2019-11-29T17:48:19.267 回答