我有一个动态对象(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?
答案 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");