Как использовать перечисления в качестве XName
Я хочу создать новый XElement
или же XAttribute
используя enum
который хранит значения. Конструктор обоих классов ожидает XName
как name
а также object
как content
, Это означает, что я могу передать перечисление как content
но мне нужно использовать ToString()
использовать его в name
, Обратите внимание, что XName
имеет неявный оператор для string
,
Это работает:
new XElement(HttpStatusCode.Accepted.ToString(), (int)HttpStatusCode.Accepted)
new XElement(HttpStatusCode.Accepted.ToString(), HttpStatusCode.Accepted)
Это не работает:
new XElement(HttpStatusCode.Accepted, (int)HttpStatusCode.Accepted)
Любые предложения, как enum
может быть для установки имени XElement
?
Благодарю.
2 ответа
Перечисления не являются неявно конвертируемыми в строки.
C# в настоящее время также не имеет возможности определять операторы расширений.
Метод расширения может упростить это:
public static class EnumXmlExtensions
{
public static XElement EncodeXElement(this Enum @enum)
{
return new XElement(@enum.ToString());
}
}
Использование:
HttpStatusCode.Accepted.EncodeXElement(); // <Accepted />
Смотрите также:
Одно из решений, которое я могу придумать, - это создание служебного метода, который будет принимать объект и преобразовывать его в XName
и создаст соответствующий элемент / атрибут. Что-то вроде:
private static XElement NewElement(Enum name, params object[] content)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
return new XElement(name.ToString(), content);
}