2009-07-13 10 views
7

Próbuję zrozumieć, jak używać konwerterów typów po przeczytaniu this answer na jedno z pozostałych pytań. Ale nie jestem pewien, czy całkiem to rozumiem ...C#: Jak używać konwertera typów do lokalizowania enumeratorów

W moim konkretnym przypadku chciałbym "przekonwertować" członka enum na zlokalizowany ciąg znaków, pobierając ciąg zasobów w zależności od tego, który element jest członkiem wyliczenia. Tak na przykład, gdybym miał ten ENUM:

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

lub to:

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

Jak bym utworzyć typ Converter, który może konwertować tych członków w zlokalizowanych ciągów? I jak tego użyć? Obecnie będę musiał użyć go w aplikacji WinForm, ale bardziej ogólne przykłady również są mile widziane.

Odpowiedz

6

Aby utworzyć TypeConverter, wystarczy utworzyć klasę dziedziczącą po TypeConverter. Następnie używasz TypeConverterAttribute, aby oznaczyć swoją klasę, tak aby w każdej chwili ktoś spróbował konwersji na twoją klasę, twój TypeConverter jest wywoływany.

Po odziedziczeniu z TypeConverter, należy zastąpić niektóre z jego metod, aby zrobić to, co chcesz. Najprawdopodobniej na początek spojrzysz na ConvertFrom(), ConvertTo() i ConvertToString() - tam możesz zaimplementować logikę, aby wyciągnąć zlokalizowaną wersję twoich ciągów.

Aby użyć TypeConverter, byś kodować coś takiego:

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

MSDN oczywiście ma documentation and some examples realizacji TypeConverter.

+1

Ale jak dokonać konwersji? – Svish

+0

Zaktualizowałem moją odpowiedź. – womp