3

を使用してに変換できるTState条件下で、コンストラクターでジェネリック クラスを取るクラスがあります。その後、フラグとして使用されます。TStateUInt64TypeConverter

[Flags]に列挙型を使用したいのですTStateが、次のように定義しても

[Flags]  
public enum EState : ulong
{
    None = 0x0,
    State1= 0x1,
    State2= 0x2,
    State3= 0x4
}

TypeConverter typeConv = TypeDescriptor.GetConverter(typeof(EState)); typeConv.CanConvertTo(typeof(UInt64))が false の場合。

適切に変換される列挙型を作成するにはどうすればよいですか? ありがとう!

4

1 に答える 1

2

使用できますConvert.ChangeType()

[Flags]
private enum MyEnum1 : ulong 
{
   A =1,
   B = 2
}

その後

MyEnum1 enum1 = MyEnum1.A | MyEnum1.B;
ulong changeType = (ulong) Convert.ChangeType(enum1, typeof (ulong));

アップデート

なぜTypeDescriptor機能しないのですか?

ドキュメントによると:

このメソッドは、TypeConverterAttribute を探すことによって、適切な型コンバーターを探します。TypeConverterAttribute が見つからない場合は、プリミティブ型が見つかるまでクラスの基本クラス階層をトラバースします。

TypeDescriptor と TypeConvertor は で動作しますがExpandableObjectConverter、ではConvert動作しIConvertibleます。

于 2011-05-10T12:24:28.930 に答える