質問

DateTimeConverterクラスは、DateTimeと文字列間の変換を提供します。 DateTimeとdoubleの間の変換もサポートしたいと思います。

MSDNに従って、DateTimeConverterクラスを拡張してこれを行うことができます- MSDN DateTimeConverter

DateTimeConverterを継承し、CanConvertTo、CanConvertFromなどの適切なオーバーライドを提供するクラスを作成しました。

以下のコードが呼び出されたときに、フレームワークがBCL(DateTimeConverter)で提供されているものではなく、DateTimeコンバーター(DateTimeConverterEx)を使用していることを確認するにはどうすればよいですか?

    DateTime dt = DateTime.Now;
    // This line returns a DateTimeConverter which I don't want. 
    // Would like to get a DateTimeConverterEx.
    TypeConverter tc = TypeDescriptor.GetConverter(dt);
    double dbl = (double)tc.ConvertTo(dt, typeof(double));

ありがとう。

役に立ちましたか?

解決

コンバータを割り当てる必要があります。プロパティごとに、次を使用できます。

[TypeConverter(typeof(DateTimeConverterEx))]
public DateTime Foo {get {...} set {...}}

これは、フォームの使用に対して機能します:

var prop = TypeDescriptor.GetProperties(obj)["Foo"];
var converter = prop.Converter;
// as before, using "converter"

これは、最も一般的なバインディングシナリオで機能します。

編集

any のコンバーターを設定するにはDateTime

TypeDescriptor.AddAttributes(typeof(DateTime),
    new TypeConverterAttribute(typeof(DateTimeConverterEx)));

サンプルコードが機能するようになりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top