我正在使用枚举和xml文件。
因为xml总是返回字符串值,所以我需要将这些值转换为我的枚举值。
//while reading the xml file:
ItemType = xml.Element("ItemType") != null ?(ProjectTreeItemTypes)Enum.Parse(typeof(ProjectTreeItemTypes), elem.Element("ItemType").Value,true) : ProjectTreeItemTypes.None
我想对枚举实现始终为avaialbel .toString()之类的东西。有办法解决这个问题吗?
结果应如下所示:
ItemType = xml.Element("ItemType") != null ? elem.Element("ItemType").Value.toItemType() : ProjectTreeItemTypes.None
这有可能是某种原因还是类似的原因?
甚至像简单的演员表这样的东西也会很好:
ItemType = xml.Element("ItemType") != null ? (ProjectTreeItemTypes)elem.Element("ItemType").Value : ProjectTreeItemTypes.None
谢谢
答案 0 :(得分:1)
您可以在静态类中创建扩展方法。
public static class Extentsion
{
public static ProjectTreeItemTypes ToEnum(this XElement elem)
{
return elem.Element("ItemType") != null ?
(ProjectTreeItemTypes)Enum.Parse(typeof(ProjectTreeItemTypes), elem.Element("ItemType").Value,true) : ProjectTreeItemTypes.None
}
}
然后您将可以像这样使用它:
xml.ToEnum();
答案 1 :(得分:1)
您可以为此编写扩展方法
public static class Ext
{
public static ProjectTreeItemTypes ToItemType(this string value)
{
return value == null
? ProjectTreeItemTypes.None
: (ProjectTreeItemTypes) Enum.Parse(typeof(ProjectTreeItemTypes), value, true);
}
}
它将接受XElement.Value
的string
并返回ProjectTreeItemTypes
枚举
用法示例
ItemType = xml.Element("ItemType")?.Value.ToItemType() ?? ProjectTreeItemTypes.None;
由于您可以将null
的值传递给扩展方法,因此可以使用null-conditional operator ?.
简化null
的检查
答案 2 :(得分:1)
为XmlElement
创建一个扩展名,该扩展名是Enum.Parse
的包装:
static TEnum ParseEnum <TEnum>(this XmlElement element) where TEnum : struct, Enum
{
return Enum.Parse<TEnum>(element.Value);
}
然后使用:
ItemType = xml.Element("ItemType")?.ParseEnum<ProjectTreeItemTypes>() ?? ProjectTreeItemTypes.None;
或者您可以让扩展名负责返回默认值:
static TEnum TryParseEnum <TEnum>(this XmlElement element, TEnum defaultValue) where TEnum : struct, Enum
{
if (Enum.TryParse<TEnum>(element.Value, out var val))
{
return val;
}
return defaultValue;
}
用法:
ItemType = xml.Element("ItemType").TryParseEnum(ProjectTreeItemTypes.None);