2014-04-03 62 views
1

我想創建一個新的XElementXAttribute使用存儲值的enum。這兩個類的構造函數需要XNamenameobjectcontent。這意味着,我可以通過一個枚舉爲content但我需要使用ToString()name使用它。請注意,XName有一個隱含的運算符string如何使用枚舉作爲XName

這工作:

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

這不起作用:

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

任何建議如何的enum可用於設置XElement的名字嗎?

謝謝。

回答

0

一種解決方案我能想到的是創造一個實用方法,將接受一個對象,並把它轉換成XName和將創建相應的元素/屬性。例如:

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

     return new XElement(name.ToString(), content); 
    } 
1

枚舉不能隱式轉換爲字符串。

C#目前沒有要麼定義擴展經營的能力。

延伸方法可以簡化此:

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

用法:

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

參見:

Operator Overloading with C# Extension Methods

+0

'@ enum.ToString()'作品和較短。我看到它的實現使用'InternalFormat()'而後者使用'GetName()'。 –