2

このクラステンプレートのように、WPFアプリケーションで汎用データ型コンバーターを作成したいと思います。

[ValueConversion(typeof(T), typeof(string))]
class DataTypeConverter<T> : IValueConverter

int、double、byte、ushortなどのデータ型をstringに、またはその逆に変換し、クラスの異なるプロパティタイプの双方向バインディングで使用してから、次の1行のコードで任意の型を作成します。

class ushortTypeConverter : DataTypeConverter<ushort>{}

可能であれば、間違った入力の場合にバインドされた検証メッセージをテキストボックスに表示します。

そのようなクラステンプレートを書くことは可能ですか?

4

1 に答える 1

5

残念ながら、ジェネリック属性を使用することはできません(typeof(T)[ValueConversion(typeof(T), typeof(string))]。詳細については、 C#がジェネリック属性タイプを禁止する理由を参照してください。言い換えると、まれなエッジケースと考えられていたものを回避するためのコンパイラの簡略化です。

それを除けば、このアプローチがうまくいかない理由は考えられません。ただし、 System.ComponentModel.TypeConverterのようなクラスがあり、ジェネリックなしでほとんどの変換を実行できる可能性があります。単純なコンバーターでそれをラップする方が簡単かもしれません。

そうでなければ、必要なことの全部または一部を実行する可能性のあるIValueConverterがたくさんあります。見る:

于 2013-01-01T12:30:40.740 に答える