【问题标题】:set Enums using reflection使用反射设置枚举
【发布时间】:2011-08-10 11:22:04
【问题描述】:

如何使用反射设置枚举,

我的班级有枚举:

public enum LevelEnum
    {
        NONE,
        CRF,
        SRS,
        HLD,
        CDD,
        CRS
    };

在运行时我想将该枚举设置为 CDD,例如。

我该怎么做?

【问题讨论】:

  • 提出你真正的问题,帮助你会容易得多。

标签: c# c#-4.0 c#-3.0 c#-2.0


【解决方案1】:

尝试使用枚举类

LevelEnum s = (LevelEnum)Enum.Parse(typeof(LevelEnum), "CDD");

【讨论】:

  • 如果LevelEnum 在即时代码中不可用,而只能通过反射,我该怎么办?
【解决方案2】:
public class MyObject
{
    public LevelEnum MyValue {get;set,};
}


var obj = new MyObject();
obj.GetType().GetProperty("MyValue").SetValue(LevelEnum.CDD, null);

【讨论】:

    【解决方案3】:
    value = (LevelEnum)Enum.Parse(typeof(LevelEnum),"CDD");
    

    所以基本上你只需解析与你希望分配给变量的枚举值相对应的字符串。如果字符串不是枚举的已定义成员,这将失败。你可以用Enum.IsDefined(typeof(LevelEnum),input);检查一下

    【讨论】:

    • 感谢您的回复,我收到错误:它无法将类型LevelEnum转换为String。
    • @Yasser 上面的代码没有尝试将 LevelEnum 转换为字符串
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2012-12-12
    • 2017-10-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多