C#: How to use a Type Converter to localize enums

13,282

Solution 1

To create a TypeConverter, simply create a class that inherits from TypeConverter. Then you use the TypeConverterAttribute to tag your class, so that anytime someone tries a convert operation on your class, your TypeConverter is invoked.

Once you inherit from TypeConverter, you should override some of its methods to do what you want. You'd probably want to look at ConvertFrom(), ConvertTo(), and ConvertToString() to start with - that's where you would implement the logic to pull out your localized version of your strings.

To use your TypeConverter, you would code something like this:

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

MSDN of course has the documentation and some examples of TypeConverter implementation.

Solution 2

I believe this was already answered in How do I override ToString in C# enums?

Also, you could combine this with an extension method for enums with a name like ToDisplayString.

Share:
13,282
Lemon
Author by

Lemon

Software Developer, Geek, HSP, SDA, ..., open, honest, careful, perfectionist, ... Currently into indoor rowing and rock climbing, just to mention something non-computer-related... Not the best at bragging about myself... so... not sure what more to write... 🤔

Updated on June 11, 2022

Comments

  • Lemon
    Lemon almost 2 years

    I'm trying to understand how to use Type Converters after reading this answer to one of my other questions. But I'm not sure if I quite get it...

    In my particular case I would like to "convert" an enum member into a localized string by getting a resource string depending on what enum member it is. So for example if I had this enum:

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

    or this:

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

    How would I create a Type Converter that could convert those members into localized strings? And how would I use it? Currently I would need to use it in a WinForms application, but more general examples are welcome as well.

  • Lemon
    Lemon almost 15 years
    But how do you do the conversion?