2009-07-26 11 views
1

Je travaille en C#, Visual Studio '05 ... Dans mon énumération, comment puis-je utiliser le caractère '?'? Mon ENUM est ci-dessous:Comment utiliser? caractère dans une énumération

public enum Questions 
{ 
    How_old_are_you?_= 0,//How to set the ? character 
    What_is_your_name= 1 
} 

Après avoir activé le caractère '?' il y a quelques erreurs.

Répondre

2

Vous ne pouvez pas. ? est un opérateur, donc une séquence de caractères le contenant n'est pas un identifiant valide.

1

Vous ne pouvez pas utiliser les points d'interrogation dans les identificateurs d'énumération. Les identifiants d'une énumération suivent les mêmes règles que les autres identifiants.

Vous pouvez utiliser le caractère @ pour utiliser des mots-clés réservés comme identifiants, mais vous ne pouvez toujours pas utiliser les caractères interdits dans un identificateur.

13

? n'est pas un caractère valide dans un identificateur C# (y compris les valeurs enum). Je vous suggère fortement d'utiliser quelque chose comme:

public enum Question 
{ 
    [Description("How old are you?")] 
    Age, 

    [Description("What is your name?")] 
    Name 
} 

Ou une carte ou un fichier ressource etc - il suffit de ne pas essayer de faire le nom de l'ENUM dans une description du langage naturel.

EDIT: Pour référence, si vous voulez obtenir au Description de code, voici comment le faire (grâce Christian Hayter):

((DescriptionAttribute) Attribute.GetCustomAttribute(
    typeof(Question).GetField("Age", BindingFlags.Public | BindingFlags.Static), 
     typeof(DescriptionAttribute), false) 
).Description; 
+0

Merde, battu par 1 minute –

+0

Peut-être un peu de code sur la façon d'obtenir la valeur de la description serait également dans l'ordre, car je crois que cela serait utile dans le contexte de la question. (Et je suis curieux.) –

+4

((DescriptionAttribute) Attribute.GetCustomAttribute (typeof (Question) .GetField ("Age", BindingFlags.Public | BindingFlags.Static), typeof (DescriptionAttribut), false)). Description –

0

Vous pouvez ajouter q après la question pour le rendre descriptif . Ex:

How_old_are_you_q= 0,  //Replace ? with q 
    What_is_your_name_q= 1 
0

Une autre solution possible pourrait être un mélange entre un ENUM et un dictionnaire:

public enum Question 
{ 
    Age, 
    Name 
} 

... 

Dictionary<Question,string> Questions = new Dictionary<Question,string>(); 

Questions.Add(Question.Age, "How old are you ?"); 
Questions.Add(Question.Name, "What is your name ?"); 
0

Vous pouvez marquer vos Enum éléments avec des caractères de soulignement, qui sont autorisés dans Enum, et de les remplacer pour afficher.

Par exemple, la liaison d'un Enum à un ComboBox, par exemple, remplacer d'abord « __ » avec « ? », Puis « _ » avec l'espace Enum article How_old_are_you__ devient ComboBox article « Quel âge avez-vous? » Je l'utilise quand je veux coller Enum sur d'autres options. Il fonctionne bien pour charger partiellement les articles Enum dans les listes et les commandes d'affichage.

Questions connexes