2009-07-13 4 views
7

J'essaie de comprendre comment utiliser les convertisseurs de type après avoir lu this answer à l'une de mes autres questions. Mais je ne suis pas sûr si je comprends bien ...C#: Comment utiliser un convertisseur de type pour localiser des énumérations

Dans mon cas particulier, je voudrais "convertir" un membre enum en une chaîne localisée en obtenant une chaîne de ressources en fonction de quel membre enum c'est. Ainsi, par exemple si j'avais cette ENUM:

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

ou ceci:

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

Comment pourrais-je créer un convertisseur de type qui pourrait convertir ces membres en chaînes localisées? Et comment pourrais-je l'utiliser? Actuellement, je devrais l'utiliser dans une application WinForms, mais des exemples plus généraux sont également les bienvenus.

Répondre

6

Pour créer un TypeConverter, créez simplement une classe qui hérite de TypeConverter. Ensuite, vous utilisez le TypeConverterAttribute pour marquer votre classe, de sorte qu'à chaque fois que quelqu'un tente une opération de conversion sur votre classe, votre TypeConverter est appelé. Une fois que vous avez hérité de TypeConverter, vous devez remplacer certaines de ses méthodes pour faire ce que vous voulez. Vous devriez probablement regarder ConvertFrom(), ConvertTo(), et ConvertToString() pour commencer - c'est là que vous implémenteriez la logique pour extraire votre version localisée de vos chaînes.

Pour utiliser votre TypeConverter, vous code quelque chose comme ceci:

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

MSDN a bien sûr la mise en œuvre de documentation and some examples TypeConverter.

+1

Mais comment faites-vous la conversion? – Svish

+0

Mis à jour ma réponse. – womp

1

Je crois que cela a été déjà répondu à How do I override ToString in C# enums?

En outre, vous pouvez combiner cela avec une méthode d'extension pour énumérations avec un nom comme ToDisplayString.

Questions connexes