4

我有一个动态对象(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?
4

2 回答 2

12

如果c.Make总是有一个值(例如,它的类型是Manufacturer, notManufacturer?或者在设置之前该属性根本不存在):

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

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

于 2012-10-20T16:09:32.000 回答
2

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

vehicle.Make = (dynamic)Enum.Parse(vehicle.Make.GetType(), "Toyota");
于 2013-01-17T23:28:27.113 回答