对XElement进行空检查

laz*_*ymf 8 c# xml linq-to-xml

我当前的项目(C#3.5)有很多这样的代码(elem是XElement的一个实例):

textbox1.Text = elem.Element("TagName") == null ? "" : elem.Element("TagName").Value;
Run Code Online (Sandbox Code Playgroud)

有没有办法在不重复调用elem.Element()且不使用扩展方法的情况下编写相同的东西?也许使用lambdas?(但我无法弄清楚如何.)

aL3*_*891 13

XElement显式转换为实际调用.Value的String(以及一堆其他类型).换句话说,你可以这样写:

var value = (String)elem.Element("TagName");
Run Code Online (Sandbox Code Playgroud)

我认为如果实际元素也为空,这将返回null

-编辑-

经核实,这是一个例子:

 var x = new XElement("EmptyElement");
 var n = (String)x.Element("NonExsistingElement");
Run Code Online (Sandbox Code Playgroud)

n 在此之后将为null.

  • 所以 - 只是陈述它 - 完整的解决方案是`(String)elem.Element("TagName")?? "";`. (4认同)

Øyv*_*hen 7

是.你可以这样写:

(string)elem.Element("TagName") ?? "";
Run Code Online (Sandbox Code Playgroud)

这是空合并运算符.

这意味着如果左侧不为空,则使用左侧.如果为null,则使用右侧.

  • 你没有读过这个问题.如果elem.Element("TagName")!= null,我们需要elem.Element("TagName").Value,而不是elem.Element("TagName") (3认同)
  • Øyvind:`:`之后的部分有一个额外的`.Value`.我偶然发现了陷阱. (2认同)