我的班级看起来像这样:
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#
有人有个主意吗?
答案 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
,希望这有帮助!