繁体   English   中英

实现枚举类型的转换为 static “方法”

[英]Implement conversion of enum types as static “method”

我正在使用枚举和 xml 文件。

因为 xml 总是返回字符串值,所以我需要将这些值转换为我的枚举值。

//while reading the xml file:
ItemType = xml.Element("ItemType") != null ?(ProjectTreeItemTypes)Enum.Parse(typeof(ProjectTreeItemTypes), elem.Element("ItemType").Value,true) : ProjectTreeItemTypes.None

我想在我的枚举中实现类似 always 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

谢谢

您可以在 static class 中创建扩展方法。


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();

您可以为此编写扩展方法

public static class Ext
{
    public static ProjectTreeItemTypes ToItemType(this string value)
    {
        return value == null
            ? ProjectTreeItemTypes.None
            : (ProjectTreeItemTypes) Enum.Parse(typeof(ProjectTreeItemTypes), value, true);
    }
}

它将接受string ,即XElement.Value并返回ProjectTreeItemTypes枚举

使用示例

ItemType = xml.Element("ItemType")?.Value.ToItemType() ?? ProjectTreeItemTypes.None;

由于您可以将null值传递给扩展方法,因此可以使用空条件运算符?.简化您的null检查。

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM