C #: как использовать конвертер типов для локализации перечислений - PullRequest
7 голосов
/ 13 июля 2009

Я пытаюсь понять, как использовать преобразователи типов после прочтения этого ответа на один из моих других вопросов. Но я не уверен, что вполне понимаю ...

В моем конкретном случае я хотел бы "преобразовать" член перечисления в локализованную строку, получая строку ресурса в зависимости от того, какой это член перечисления. Так, например, если бы у меня было это перечисление:

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, но приветствуются и более общие примеры.

Ответы [ 2 ]

6 голосов
/ 13 июля 2009

Чтобы создать TypeConverter, просто создайте класс, который наследуется от TypeConverter. Затем вы используете TypeConverterAttribute для маркировки вашего класса, чтобы каждый раз, когда кто-то пытался выполнить операцию преобразования в вашем классе, вызывался ваш TypeConverter.

Как только вы унаследуете от TypeConverter, вы должны переопределить некоторые из его методов, чтобы делать то, что вы хотите. Возможно, вы захотите взглянуть на ConvertFrom (), ConvertTo () и ConvertToString (), чтобы начать с него - вот где вы бы реализовали логику для извлечения локализованной версии ваших строк.

Чтобы использовать TypeConverter, вы должны написать что-то вроде этого:

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

MSDN, конечно, имеет документацию и некоторые примеры реализации TypeConverter.

1 голос
/ 13 июля 2009

Я считаю, что на этот вопрос уже ответили Как переопределить ToString в перечислениях C #?

Кроме того, вы можете комбинировать это с методом расширения для перечислений с именем, подобным ToDisplayString.

...