我怎么用?把这两行合二为一?

时间:2009-08-05 15:45:34

标签: c#

我想将下面的两个属性分配行放到一行中,因为我要将它们构建到一个应用程序中,它们将会很多。

有没有办法在一行优雅构造的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();

        }
    }
}

6 个答案:

答案 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");