1

我想创建一个新的XElementXAttribute使用enum存储值的。两个类的构造函数都期望XNameasnameobjectas content。这意味着我可以传递一个枚举,content但我需要ToString()name. 请注意,它XName有一个隐式运算符 for string

这有效:

new XElement(HttpStatusCode.Accepted.ToString(), (int)HttpStatusCode.Accepted)
new XElement(HttpStatusCode.Accepted.ToString(), HttpStatusCode.Accepted)

这不起作用:

new XElement(HttpStatusCode.Accepted, (int)HttpStatusCode.Accepted)

有什么建议enum可以设置 an 的名称XElement吗?

谢谢。

4

2 回答 2

1

枚举不能隐式转换为字符串。

C# 目前也没有定义扩展运算符的能力。

扩展方法可以简化这一点:

public static class EnumXmlExtensions
{
    public static XElement EncodeXElement(this Enum @enum)
    {
        return new XElement(@enum.ToString());
    }
}

用法:

HttpStatusCode.Accepted.EncodeXElement(); // <Accepted />

也可以看看:

使用 C# 扩展方法的运算符重载

于 2014-04-03T13:51:21.093 回答
0

我能想到的一种解决方案是创建一个实用方法,该方法将接受一个对象并将其转换为XName并创建相应的元素/属性。就像是:

    private static XElement NewElement(Enum name, params object[] content)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }

        return new XElement(name.ToString(), content);
    }
于 2014-04-03T13:34:01.053 回答