2009-07-13 16 views
7

this answerを他の質問の1つに読んだ後、タイプコンバータを使用する方法を理解しようとしています。しかし、私はそれを得るかどうかは分かりません...C#:タイプコンバータを使用して列挙型をローカライズする方法

私の特別なケースでは、列挙型メンバをローカライズされた文字列に変換するには、列挙型メンバに応じてリソース文字列を取得します。

public enum Severity 
{ 
    Critical, 
    High, 
    Medium, 
    Low 
} 

またはこの:私はこの列挙持っていたのであれば、たとえば

public enum Color 
{ 
    Black = 0x0, 
    Red = 0x1, 
    Green = 0x2, 
    Blue = 0x4, 
    Cyan = Green | Blue, 
    Magenta = Red | Blue, 
    Yellow = Red | Green, 
    White = Red | Green | Blue, 
} 

をどのように私は、ローカライズされた文字列にメンバーを変換できる形コンバータを作成するのでしょうか?そして私はそれをどのように使用しますか?現在私はWinFormsアプリケーションでそれを使用する必要がありますが、より一般的な例も歓迎します。

答えて

6

TypeConverterを作成するには、TypeConverterから継承するクラスを作成するだけです。次に、TypeConverterAttributeを使用してクラスにタグを付けると、クラスで変換操作を試みるたびに、TypeConverterが呼び出されます。

TypeConverterから継承したら、必要な処理を行うためにいくつかのメソッドをオーバーライドする必要があります。 ConvertFrom()、ConvertTo()、ConvertToString()を見てみましょう。これは、ローカライズされた文字列を引き出すロジックを実装する場所です。当然の

var foo = TypeDescriptor.GetConverter(typeof(T)); 
var mystring = foo.ConvertToString(myObject)); 

MSDNのTypeConverter実装のdocumentation and some examplesがあります

があなたのTypeConverterを使用するには、このような何かをコーディングします。

+1

しかし、どのように変換を行いますか? – Svish

+0

私の答えを更新しました。 – womp

1

私はこれはすでにまたHow do I override ToString in C# enums?

に答えたと信じて、あなたはToDisplayStringような名前を持つ列挙型の拡張方法と組み合わせることができます。

関連する問題