C#动态对象 - 设置“枚举”值

时间:2012-10-20 16:04:46

标签: c# c#-4.0 dynamic

我有一个动态对象(C#4.0),因为我想动态设置属性的枚举值,但我没有该类型的程序集引用。关于如何做到这一点的任何想法/是否可以这样做?

dynamic vehicle = myObject;
vehicle.AddTires(); // working
vehicle.ConfigureEngine(); //working
vehicle.seat="Leather";//working
//Enum needs to be set for the Make
vehicle.Make = Manufacturer.Toyota; // how to do this?

2 个答案:

答案 0 :(得分:12)

如果c.Make始终有值(例如,其类型为Manufacturer,而不是Manufacturer?,或者在设置之前该属性根本不存在):

c.Make = Enum.Parse(c.Make.GetType(), "Toyota");

如果这对您不起作用,要使用此方法,您需要以某种方式获取对Manufacturer类型的引用。这可能有多复杂取决于您的动态类型的设置方式。另一种方法(例如,如果它是Manufacturer?并且可能为null)您可能需要使用反射来获取Make属性以查找它的类型。

答案 1 :(得分:2)

Enum.Parse()的返回类型为object,但是,您可以将返回的对象强制转换为dynamic,以强制它查看实际的运行时类型。

vehicle.Make = (dynamic)Enum.Parse(vehicle.Make.GetType(), "Toyota");