2014-09-26 12 views
16

ho trovato una cosa molto interessante - Diciamo:In che modo C# decide quale valore enum viene restituito? Qualche regola?

enum Myenum { a, b, c= 0 } 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      Myenum ma = Myenum.a; 
      Console.WriteLine(ma); 
     } 
    } 

Il risultato è un , perché?

E se dico:

enum Myenum { a, b=0, c} 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      Myenum ma = Myenum.a; 
      Console.WriteLine(ma); 
     } 
    } 

Il risultato diventa "b", perché?

+2

correlati: http://stackoverflow.com/questions/8043027/non- unique-enum-values ​​e http://stackoverflow.com/questions/10268250/enum-tostring-return-wrong-value –

+4

@TimSchmelter Perché dovresti trovare i duplicati e postare comunque una risposta? – Rawling

+6

@Rawling: perché pensavo che fossero solo correlati (almeno il primo collegamento non è un duplicato). Ho anche trovato la documentazione che non è stata menzionata nelle risposte. –

risposta

13

Da Enum.ToString:

Se più membri di enumerazione hanno lo stesso valore sottostante e tentativo di recuperare la rappresentazione di stringa di nome un'enumerazione del membro in base al suo valore sottostante, il codice non dovrebbe fare qualsiasi ipotesi su quale nome il metodo restituirà. Ad esempio, la seguente enumerazione definisce due membri, Shade.Gray e Shade.Grey, che hanno lo stesso valore sottostante.

correlati: enum.ToString return wrong value?

Quindi mi sento di assegnare i valori unici se si wannt fare affidamento sul nome:

enum Myenum { hello = 1, world = 2, qiang = 3 } 
+0

Fammi leggere e tornerò da te :) – xqMogvKW

+7

@ths: sì, ma devi sapere che 'Console.WriteLine (ma)' usa 'Enum.ToString' e devi sapere che questo è documentato là che sfortunatamente spesso non è il caso. Se fosse così semplice, mi chiedo perché le risposte alle domande correlate (o addirittura duplicate) non menzionavano MSDN. –

Problemi correlati