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そうでないManufacturer?場合、または設定する前にプロパティがまったく存在しない場合):

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

これがそのままでは機能しない場合、このアプローチを使用するには、何らかの方法でタイプへの参照を取得する必要がありますManufacturer。これがどれほど複雑になるかは、動的タイプの設定方法によって異なります。別のアプローチ(たとえば、nullの場合、Manufacturer?nullの可能性がある場合)は、リフレクションを使用してMakeプロパティを取得し、それがどのタイプであるかを見つけることです。

于 2012-10-20T16:09:32.000 に答える
2

Enum.Parse()のreturnタイプはobjectですが、返されたオブジェクトをキャストしてdynamic、実際のランタイムタイプを参照するように強制することができます。

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