我想将下面的两个属性分配行放到一行中,因为我要将它们构建到一个应用程序中,它们将会很多。
有没有办法在一行优雅构造的C#中表达这两行,也许有一个??像这样的运营商?
string nnn = xml.Element("lastName").Attribute("display").Value ?? "";
以下是代码:
using System;
using System.Xml.Linq;
namespace TestNoAttribute
{
class Program
{
static void Main(string[] args)
{
XElement xml = new XElement(
new XElement("employee",
new XAttribute("id", "23"),
new XElement("firstName", new XAttribute("display", "true"), "Jim"),
new XElement("lastName", "Smith")));
//is there any way to use ?? to combine this to one line?
XAttribute attribute = xml.Element("lastName").Attribute("display");
string lastNameDisplay = attribute == null ? "NONE" : attribute.Value;
Console.WriteLine(xml);
Console.WriteLine(lastNameDisplay);
Console.ReadLine();
}
}
}
答案 0 :(得分:8)
当然,但这很糟糕,不优雅:
string lastNameDisplay = xml.Element("lastName").Attribute("display") == null ? "NONE" : xml.Element("lastName").Attribute("display").Value;
如果您愿意,可以编写扩展方法:
public static string GetValue(this XAttribute attribute)
{
if (attribute == null)
{
return null;
}
return attribute.Value;
}
用法:
var value = attribute.GetValue();
答案 1 :(得分:4)
当然可以!
这样做:
string lastNameDisplay = (string)xml.Element("lastName").Attribute("display") ?? "NONE";
答案 2 :(得分:3)
为什么不使用一个小辅助函数来获取XElement并返回lastNameDisplay字符串?
答案 3 :(得分:3)
你可以这样做:
string lastNameDisplay = (xml.Element("lastName").Attribute("display") ?? new XAttribute("display", "NONE")).Value;
答案 4 :(得分:1)
不完全是。你正在寻找的是一个无效的守卫(我认为这就是所谓的),c#没有。如果前面的对象不为null,它只会调用受保护的属性。
答案 5 :(得分:0)
不完全。您最接近的是使用如下扩展方法:
public static string ValueOrDefault(this XAttribute attribute, string Default)
{
if(attribute == null)
return Default;
else
return attribute.Value;
}
然后你可以将你的两行缩短为:
string lastNameDisplay = xml.Element("lastName").Attribute("display").ValueOrDefault("NONE");