c# - 解析为可空枚举

标签 c# .net reflection enums nullable

我正在尝试将字符串解析回 MyEnum 类型的可为 null 的属性。

public MyEnum? MyEnumProperty { get; set; }

我在线上遇到错误:

Enum result = Enum.Parse(t, "One") as Enum;
// Type provided must be an Enum. Parameter name: enumType

我在下面有一个示例控制台测试。如果我删除属性 MyEntity.MyEnumProperty 上的 nullable,则代码有效。

除了通过反射,我如何在不知道 typeOf 枚举的情况下让代码工作?

static void Main(string[] args)
    {
        MyEntity e = new MyEntity();
        Type type = e.GetType();
        PropertyInfo myEnumPropertyInfo = type.GetProperty("MyEnumProperty");

        Type t = myEnumPropertyInfo.PropertyType;
        Enum result = Enum.Parse(t, "One") as Enum;

        Console.WriteLine("result != null : {0}", result != null);
        Console.ReadKey();
    }

    public class MyEntity
    {
        public MyEnum? MyEnumProperty { get; set; }
    }

    public enum MyEnum
    {
        One,
        Two
    }
}

最佳答案

Nullable<T> 添加一个特例将工作:

Type t = myEnumPropertyInfo.PropertyType;
if (t.GetGenericTypeDefinition() == typeof(Nullable<>))
{
    t = t.GetGenericArguments().First();
}

关于c# - 解析为可空枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9764041/

相关文章:

c# - 在 C# 中使用 Pop3 读取电子邮件

c# - 使用 AssemblyInfo.cs 设置其他程序集的属性及其背后的机制

java - 用于查找包中所有类的反射库

c# - 在安装过程中选择 ClickOnce 应用程序的安装路径

.net - ReSharper 混淆了我的 Visual Studio - 将 Visual Studio 重置为默认值

c# - 如何以编程方式运行 RedShift sql 脚本文件

-1 的 C# 7 二进制文字

.net - 有没有一种使用反射复制类型的直接方法?

kotlin - 可变和不可变集合类是同一个 kotlin

c# - 将大型项目从 VB.Net 迁移到 C# 的技巧?