Значение 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;
предпочел бы метод расширения.