如何将自己的枚举类型转换为通用枚举类型?

时间:2020-05-19 11:21:11

标签: c# generics enums casting

如何将自己的枚举类型转换为通用枚举类型?

public enum MyEnum
    {
        First,
        Second
    }

    public class MyEnumParser<TEnum>
        where TEnum : struct, Enum
    {
        public static TEnum Parse(string value)
        {
            switch (default(TEnum))
            {
                case MyEnum _: return MyEnum.First;  // Error in this line of code
                default: throw new ArgumentOutOfRangeException($"Type {nameof(TEnum)} not supported.");
            }
        }
    }

即使我在开关中明确检查类型,编译器也不允许我转换类型:

无法将类型'ConsoleApp1.MyEnum'隐式转换为'TEnum'

如果我尝试显式转换类型,则会出现另一个错误:

case MyEnum _: return (TEnum)MyEnum.First;

无法将类型'ConsoleApp1.MyEnum'转换为'TEnum'

已更新。我目前正在使用System.Text.JSON序列化程序。这是简化的示例。该方法必须是通用的。 逐步地,我将所有其他枚举添加到序列化器中。我从一个开始。

1 个答案:

答案 0 :(得分:1)

将自定义枚举类型MyEnum转换为通用枚举类型TEnum的最简单方法是使用下一种方法:

case MyEnum _: return (TEnum) (object) MyEnum.First;

以下是类似问题的链接: