una tipos quitar programacion operaciones longitud extraer ejemplos con caracteres cadenas cadena .net string constants enums

.net - tipos - c#: ¿Cómo utilizar enumeración para almacenar constantes de cadena?



string[] c# ejemplos (4)

Posible duplicado:
Enumerar con cuerdas

Es posible tener constantes de cadena en enumeración como

enum{name1="hmmm" name2="bdidwe"}

Si no es así, ¿cuál es la mejor manera de hacerlo?

Lo probé, no funciona para la cadena, así que ahora mismo estoy agrupando todos los indicadores relacionados en una clase como

class operation { public const string name1="hmmm"; public const string name2="bdidwe" }


Las constantes de enumeración solo pueden ser de tipo ordinal ( int de forma predeterminada), por lo que no puede tener constantes de cadena en enumeraciones.

Cuando quiero algo como una "enumeración basada en cadenas", creo una clase para contener las constantes como lo hiciste tú, excepto que la convierto en una clase estática para evitar tanto la creación de instancias no deseada como las subclases no deseadas.

Pero si no desea utilizar la cadena como el tipo en firmas de métodos y prefiere un tipo más seguro y más restrictivo (como Operation ), puede usar el patrón de enumeración segura:

public sealed class Operation { public static readonly Operation Name1 = new Operation("Name1"); public static readonly Operation Name2 = new Operation("Name2"); private Operation(string value) { Value = value; } public string Value { get; private set; } }


Podría hacer esto usando DescriptionAttribute , pero luego tendría que escribir código para eliminar la cadena del atributo.

public enum YourEnum { [Description("YourName1")] Name1, [Description("YourName2")] Name2 }


Su clase de operation no se compilará como está ... usted no declaró el tipo de nombre1 y nombre2 ...

Pero ese es el enfoque que tomaría ... sí.

Si lo convierte en una estructura, entonces se convierte en un tipo de valor que puede o no ser lo que quería ...


Todo el punto de enums es ser constantes ordinales.
Sin embargo, puede lograr lo que quiere usando un método de extensión:

enum Operation { name1, name2 } static class OperationTextExtender { public static String AsText(this Operation operation) { switch(operation) { case Operation.name1: return "hmmm"; case Operation.name2: return "bdidwe"; ... } } } ... var test1 = Operation.name1; var test2 = test1.AsText();