2009-07-13 11 views
7

Estoy tratando de comprender cómo usar convertidores de tipo después de leer this answer a una de mis otras preguntas. Pero no estoy seguro si lo entiendo bastante ...C#: cómo usar un convertidor de tipo para localizar enums

En mi caso particular, me gustaría "convertir" un miembro enum en una cadena localizada obteniendo una cadena de recursos dependiendo de qué miembro enum sea. Así, por ejemplo, si tuviera esta enumeración:

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

o esto:

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

¿Cómo puedo crear un Convertidor de la que podría convertir a los miembros en las cadenas localizadas? ¿Y cómo lo usaría? Actualmente necesitaría usarlo en una aplicación de WinForms, pero también son bienvenidos ejemplos más generales.

Respuesta

6

Para crear un TypeConverter, simplemente crea una clase que herede de TypeConverter. Luego usa el TypeConverterAttribute para etiquetar su clase, de modo que cada vez que alguien intente una operación de conversión en su clase, se invoque su TypeConverter.

Una vez que herede de TypeConverter, debe reemplazar algunos de sus métodos para hacer lo que desee. Probablemente quiera ver ConvertFrom(), ConvertTo() y ConvertToString() para empezar, ahí es donde implementaría la lógica para extraer su versión localizada de sus cadenas.

Para utilizar su TypeConverter, sería codificar algo como esto:

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

MSDN, por supuesto, tiene el documentation and some examples de aplicación TypeConverter.

+1

Pero, ¿cómo se hace la conversión? – Svish

+0

Actualizado mi respuesta. – womp

Cuestiones relacionadas