簡単に再利用できる拡張メソッドを作成できます。静的クラスに配置します
public static string ElementValue(this XElement parent, string elementName)
{
var xel = parent.Element(elementName);
return xel == null ? "" : xel.Value;
}
今、あなたはそれをこのように呼ぶことができます
string result = parent.ElementValue("name");
アップデート
要素が存在しないときに空の文字列の代わりに戻るnull
と、空の要素と要素がないことを区別できるようになります。
public static string ElementValue(this XElement parent, string elementName)
{
var xel = parent.Element(elementName);
return xel == null ? null : xel.Value;
}
string result = parent.ElementValue("name");
if (result == null) {
Console.WriteLine("Element 'name' is missing!");
} else {
Console.WriteLine("Name = {0}", result);
}
編集
Microsoftは、.NETFrameworkクラスライブラリのさまざまな場所で次のパターンを使用しています
public static bool TryGetValue(this XElement parent, string elementName,
out string value)
{
var xel = parent.Element(elementName);
if (xel == null) {
value = null;
return false;
}
value = xel.Value;
return true;
}
このように呼ぶことができます
string result;
if (parent.TryGetValue("name", out result)) {
Console.WriteLine("Name = {0}", result);
}
アップデート
C#6.0(Visual Studio 2015)で、Microsoftはヌル伝播演算子を導入して?.
物事を大幅に簡素化しました。
var value = parent.Element("name")?.Value;
これにより、要素が見つからなかった場合でも、値がnullに設定されます。
??
次以外の値を返したい場合は、合体演算子と組み合わせることもできますnull
。
var value = parent.Element("name")?.Value ?? "";