2010-05-25 11 views

risposta

7

Credo che il valore predefinito sia 0, quindi verrà generato un HardwareInterfaceType non valido. Personalmente non mi piace questo tipo di codifica per le enumerazioni. IMO è più chiaro definire un valore Enum di "Non definito" o "Nessuno" e quindi inizializzare la variabile su quello.

Uno dei "trucchi" con enumerazione è che possono essere inizializzati su un valore che non esiste nell'enumerazione. Il programmatore originale avrebbe pensato che l'enum sarebbe stato inizializzato su un valore valido nella definizione Enum se avesse usato la parola chiave "predefinita". Non vero, e IMO questo non è affatto un buon uso della parola chiave "predefinita".

var foobar = default(HardwareInterfaceType); 
Console.WriteLine(Enum.IsDefined(typeof(HardwareInterfaceType), foobar)); //returns false 
Console.WriteLine(foobar); //returns 0 
+0

+1 per il valore "Non definito" – Christian

4

la parola chiave predefinita viene utilizzata principalmente durante la scrittura di codice generico.

In classi e metodi generici, un problema che si pone è come assegnare un valore predefinito a un tipo T parametrizzato quando non si sa se T sarà un tipo di riferimento o un tipo di valore e Se T è un tipo di valore, se sarà un valore numerico o una struttura.

Nel tuo caso assegna 0.

static void Main(string[] args) 
    { 

     HardwareInterfaceType type = default(HardwareInterfaceType); 
     Console.WriteLine(type.ToString()); 

     type = HardwareInterfaceType.Gpib; 
     Console.WriteLine(type.ToString()); 

     Console.ReadLine(); 
    } 

    public enum HardwareInterfaceType 
    { 
     Gpib = 1, 
     Vxi = 2, 
     GpibVxi = 3, 
    } 

    //output 
    0 
    Gpib 
+0

nel mio caso, che cosa sta assegnando? –

+1

Nel tuo caso assegna 0. –

5

default fornirà il valore predefinito per un tipo di linguaggio - nel caso di valori numerici e, per estensione, enumerazioni, pari a zero. per i tipi di riferimento, il valore predefinito è null.

È più comunemente utilizzato con generici in cui il tipo non è noto in anticipo.

2

Credo che la parola chiave predefinita viene utilizzata quando non c'è bisogno di creare una nuova istanza di qualsiasi oggetto di classe dicono:

un modo è come questo senso

HardwareInterfaceType type = new HardwareInterfaceType(); 

e la seconda è così anche

HardwareInterfaceType type = default(HardwareInterfaceType); 

Il codice precedente creerà scopo hardwareinterfacetype ma non creat e qualsiasi nuova memoria .

Problemi correlati