2010-05-25 5 views

Antwort

7

Ich glaube, der Standardwert ist 0, so dass Sie einen ungültigen HardwareInterfaceType generiert haben. Ich persönlich mag diese Art von Codierung für Enums nicht. IMO ist es klarer, einen Enum-Wert von "Undefined" oder "None" zu definieren und dann stattdessen die Variable zu initialisieren.

Einer der "Gotchas" mit Aufzählungen ist, dass sie auf einen Wert initialisiert werden können, der in der Aufzählung nicht vorhanden ist. Möglicherweise hat der ursprüngliche Programmierer gedacht, dass die Enumeration mit einem gültigen Wert in der Enum-Definition initialisiert wird, wenn er das Schlüsselwort "default" verwendet. Nicht wahr, und IMO ist dies nicht eine gute Verwendung des "Standard" -Schlüsselwort überhaupt.

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

+1 für den "Undefined" -Wert zugewiesen – Christian

4

Standardschlüsselwort wird hauptsächlich beim Schreiben von generischem Code verwendet.

In generischen Klassen und Methoden tritt ein Problem auf, wie Sie einem parametrisierten Typ T einen Standardwert zuweisen, wenn Sie nicht wissen, ob T ein Referenztyp oder ein Werttyp ist und wenn T ein Werttyp ist. ob es ein numerischer Wert oder eine Struktur ist.

In Ihrem Fall weist es 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

in meinem Fall, was ist es zuweisen? –

+1

In Ihrem Fall wird 0. –

5

default den Standardwert für einen Sprachtyp liefern - im Fall von numerischen Werten, und durch die Erweiterung, Aufzählungen, Null. Bei Referenztypen lautet der Standardwert null.

Es wird häufiger mit Generika verwendet, wo der Typ nicht von vorn bekannt ist.

2

Ich denke, die Standard-Schlüsselwort wird verwendet, wenn Sie keine neue Instanz einer Klasse-Objekt erstellen muss sagen:

ein Weg ist, wie diese

HardwareInterfaceType type = new HardwareInterfaceType(); 

und zweite Weg ist so auch

HardwareInterfaceType type = default(HardwareInterfaceType); 

Der obige Code wird Objekt von Hardwareinterfacetype erstellen, aber es wird nicht erstellen e jeder neue Speicher.

Verwandte Themen