在运行时设置enum类型的属性

时间:2017-08-14 05:46:50

标签: c# enums runtime

我的班级看起来像这样:

public class Car
{
   public enum Values
   {
      Brand 1,
      Brand 2,
      Brand 3
   }
   public Values _value {get; set;}
}

在我的主程序中,我读了一个文本文件,它给出了如下所示的某些类名:

Car(Brand 2)
Dog(Breed 1)
House(Builder 4)
Car(Brand 3)
...

在第一步中,我创建了文本文件中列出的所有实体:

var objType = "Namespace.Car"; 
var handle = Activator.CreateInstance("AssemblyName", objType);
var childObject = handle.Unwrap();

在第二步中,我现在想要将括号中给出的值写入属性。为此,我寻找相应的财产:

PropertyInfo childProperty = childObject.GetType().GetProperty("_value");

然后检查属性是否为enum类型:

if (childProperty.PropertyType.BaseType == typeof(Enum))
{
   //now set property value

我尝试了某些事情,例如,使用SetValue(),但这对枚举不起作用。我有什么方法可以在运行时这样做吗?

我看了下面的内容,人们说它不起作用,但我认为这不是我的确切情况:Setting enum value at runtime in C#

有人有个主意吗?

1 个答案:

答案 0 :(得分:0)

正如您在上面提到的问题中所讨论的那样:

enum的各个值的所有引用都会在编译时转换为数字文字,因此无法在运行时执行此操作

但是你可能想要使用类而不是枚举,如下所示:

public class Car
{
   //public enum Values
   //{
   //   Brand 1,
   //   Brand 2,
   //   Brand 3
   //}

   public Brand  _myBrand {get;set;}
   public Values _value {get; set;}
}

public sealed class Brand
{
   public int BrandOne { get; set; }
   public int BrandTwo { get; set; }
} 

使用Brand class代替enum,希望这有帮助!