7

次のシナリオがあります。

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

次のように、値を2回検索する代わりに、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

割り当てられた値を1つのステートメントで割り当ててからテストできます(ただし、宣言はできません)。

XElement children = null;

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

ただし、これは機能的には、後で割り当ててテストすることと同じです。

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

if (children != null)
{      
}

後者の方が読みやすいと思うので、後者をお勧めします(使用することもできますvar)。

変数にnull値を割り当てても、それ自体でエラーが発生することはありません(これが単なる標準のローカル変数であると想定)。その後、その変数を使用するとエラーが発生する可能性があります。xmlしたがって、上記のどちらのソリューションも、それ自体がnullでない場合は安全です。

于 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();
}

回答が遅れていますが、この質問はGoogleで一番上に表示されており、C#7の回答がありません。

于 2019-11-29T17:48:19.267 に答える