2010-06-09 11 views
9

¿Es posible hacer que el compilador convierta automáticamente mis valores de Enum en cadenas para evitar llamar explícitamente al método ToString todo el tiempo? He aquí un ejemplo de lo que me gustaría hacer:C# enum para enhebrar auto-conversión?

enum Rank { A, B, C } 

Rank myRank = Rank.A; 
string myString = Rank.A; // Error: Cannot implicitly convert type 'Rank' to 'string' 
string myString2 = Rank.A.ToString(); // OK: but is extra work 
+13

Por desgracia, la programación implica un montón de escribir, por lo que sólo vamos a tener que acostumbrarse a él. –

+0

Hmm no estoy seguro acerca de una enumeración pero en una clase podría usar un operador implícito. http://msdn.microsoft.com/en-us/library/85w54y0a.aspx –

+4

@codeka: su respuesta es divertida. No sé nada de ti, pero comencé a codificar por el solo hecho de que soy flojo y quería facilitar el uso de la computadora (por ejemplo: automatización de scripts de shell, archivos simples de proceso por lotes, etc.). Es una pregunta perfectamente válida para preguntar cómo hacer algo más fácil. –

Respuesta

9

No. Una enumeración es su propio tipo, si se desea convertir a otra cosa, usted tiene que hacer algún trabajo.

Sin embargo, dependiendo de lo que esté haciendo con él, algunas tareas lo llamarán automáticamente ToString(). Por ejemplo, se puede hacer:

Console.Writeline(Rank.A); 
+0

Ok, solo ilusiones de mi parte. – dcompiled

+6

Además, para que quede claro, no hay nada especial acerca de 'Console.WriteLine', solo tiene una sobrecarga que toma un Object y la enumeración se coloca en un recuadro, se pasa como un objeto y luego' WriteLine' llama 'ToString' sobre él. –

+1

@dcompiled - si tiene curiosidad, ¡es posible escribir su propio operador de conversión implícita para su enumeración en una cadena! http://www.csharphelp.com/2006/10/type-conversion-and-conversion-operators-in-c/ –

1

No, pero al menos se pueden hacer cosas con las enumeraciones que llamará a sus métodos ToString() cuándo se puede necesitar utilizar su valor de cadena, por ejemplo:

Console.WriteLine(Rank.A); //prints "A". 
0

la sintaxis correcta debería ser

myRank.ToString("F"); 
0

[Precaución, truco] No está seguro de si esto es desagradable, me parece un compromiso razonable.

var myEnumAsString = MyEnum+""; Console.WriteLine(myEnumAsString); //MyEnum

Esto obligará a ToString implícita()

3

Usted no está probablemente en busca de las enumeraciones en sí, sino una lista de constante de cadena. Puede ajustarse mejor a sus necesidades en algunos escenarios.

Use este lugar:

public static class Rank 
{ 
    public const string A = "A"; 
    public const string B = "B"; 
    public const string C = "C"; 
}