Значение null проверить элемент XElement
мой текущий проект (C# 3.5) имеет много такого кода (elem является экземпляром XElement):
textbox1.Text = elem.Element("TagName") == null ? "" : elem.Element("TagName").Value;
есть ли способ написать то же самое, не повторяя вызов elem.Элемент() и без использования методов расширения? Может быть, с помощью лямбд? (Но я не могу понять, как.)
4 ответов
XElement имеет явное преобразование в строку (и куча других видах) это действительно вызовет .Значение. В других словах вы можете написать это:
var value = (String)elem.Element("TagName");
Я думаю, что это вернет null, если фактический элемент также равен null
-edit -
проверено, вот пример:
var x = new XElement("EmptyElement");
var n = (String)x.Element("NonExsistingElement");
n
будет null после этого.
да. вы можете написать так:
(string)elem.Element("TagName") ?? "";
Это оператор объединения null.
это означает, что если левая сторона не равна нулю, используйте левую сторону. Если значение равно null, используйте правую сторону.
есть отличная статья о CodeProject для таких действий: http://www.codeproject.com/KB/cs/maybemonads.aspx
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class where TInput : class
{
if (o == null) return null;
return evaluator(o);
}
string valueEl = this.With(x => elem.Element("TagName")
.With(x => x.Value);
другие примеры доступны в CodeProject.
сумасшедший ??
подход:
// make this a member-variable somewhere
var emptyElement = XElement.Parse("<x></x>");
(elem.Element("TagName") ?? emptyElement).Value;
предпочел бы метод расширения.