2010-07-06 6 views
6

Meine Frage ist: kann ich überprüfen, ob eine Variable (String oder Int/Double Type) oder ein Array (String oder Int/Double Type) in C# initialisiert wird?Wie überprüft man, ob eine Variable oder ein Array in C initialisiert wird? #

Vielen Dank im Voraus.

+3

Sie erhalten widersprüchliche Antworten, weil Ihre Frage nicht eindeutig ist: "initialisiert" kann verschiedene Dinge bedeuten, je nachdem, welches Problem Sie lösen möchten. – egrunin

+0

Ebenso kann das Wort "Variable" verschiedene Dinge bedeuten.Sprechen Sie über ein Feld für die Klasse, eine Eigenschaft oder eine lokale Variable innerhalb einer Methode? – StriplingWarrior

Antwort

6

Sie sind garantiert einige Art der Initialisierung. Bei statischen oder Instanzmembern werden alle Variablen automatisch initialisiert, wenn der Typ oder die Instanz explizit oder implizit konstruiert wird (in diesem Fall ist default(Type) der Wert, also 0 für numerische Typen, null für Strings und andere Referenztypen usw.) .

Für lokale Variablen können sie nicht vor der Deklaration verwendet werden. Wenn Sie sie also überprüfen können, wurde sie initialisiert.

+0

Danke für Ihren Beitrag. Mein Problem ist jedoch, dass der mögliche Wert der Variablen 0 sein könnte, was dem initiierten Wert entspricht. – Mavershang

+0

@ user208080: Der Punkt ist, dass die Variable * initialisiert * wird. Wenn Sie * benutzerinitialisiert * meinen, dann gibt es keine Möglichkeit, das zu überprüfen, es sei denn, Sie behalten selbst den Überblick. –

+1

Wenn Sie die Möglichkeit haben möchten, zu prüfen, ob ein solcher Wert für primitive Typen wie Int32 gesetzt ist, verwenden Sie den Nullable-Typ. Dann haben Sie eine Nullreferenz, solange Ihr Code keinen anderen Wert hat. – HCL

0

Nein. Sie haben jedoch einen Compilerfehler, wenn es sich um eine lokale Variable handelt. Wenn es ein Klassenmitglied ist, wird es automatisch auf den Standard initialisiert (0 für Ints, Null für Objekte usw.)

+0

Wenn die Instanzen dynamisch erstellt werden und der Nullwert nur in bestimmten Fällen auftritt, wird der Compiler sie nicht übernehmen. Wenn Sie es nicht in Ihre Testfälle aufnehmen, kann dies zu einem Fehler führen. – Roast

+0

@Lily, worüber sprichst du "Instanzen werden dynamisch erstellt" und "null passiert nur in bestimmten Fällen"? Sprechen Sie über statische Variablen oder Instanzvariablen? Was passiert, wenn der "Compiler es nicht aufnimmt"? Erhalten Sie einen Laufzeitfehler, wenn Sie versuchen, die Variable zu verwenden? – tster

0

Zunge in der Wange, aber genaue Antwort

Ihren Quellcode Scannen und alle Verwendungen und Erklärungen der Variablen finden, um sicherzustellen, dass es bei der Deklaration initialisiert wird entweder, oder auch irgendwo garantiert, bevor es zu benutzen.

+1

... oder Sie könnten einfach versuchen, es zu kompilieren, da der Compiler das für Sie funktioniert. –

+0

+1 @Adam; macht Sinn. –

+0

Es gibt Momente, in denen der Compiler sie nicht erkennt, es sei denn, Sie gehen jeden Pfad in Ihrem Code durch. In diesen Fällen ist ein programmatischer Check notwendig. Zum Beispiel ein Array von Objekten, in dem nicht alle Objekte instanziiert werden. Sie machen eine for-Schleife und rufen jedes Objekt auf ... Sie machen die Mathematik – Roast

1

Try This,:

If var = NULL Then 
MsgBox ('Not initialized') 
End If 
2

Ja, Sie können.

Für Typen, die Instanzen benötigen (String oder Arrays, wie Sie gefragt haben), können Sie überprüfen, ob sie null sind.

Man könnte dies viele Möglichkeiten zu tun, aber eine Möglichkeit ist:

if (myObject == null) 
{ 
    //initialize it here 
} 

Primitive Datentypen erfordern keine Instancing. Zum Beispiel:

int i;

wird nicht gleich Null, wird es gleich 0

+0

Tatsächlich erhalten Sie einen Fehler bei der Kompilierung, wenn Sie versuchen, darauf zuzugreifen (das 'int i;'), da C# * * erfordert, dass Sie alle Variablen vor dem Zugriff initialisieren. – Donnie

+0

"nicht initialisiert" ist * nicht * dasselbe wie "nicht null". –

1

C# erfordert, dass alle Variablen auf einen Wert initialisiert werden, bevor Sie sie lesen.

Der Codeblock:

int i; 
if(i == 0) 
{ 
    // something... 
} 

Wird ein Fehler bei der Kompilierung erzeugen, weil Sie den Wert i, bevor die Zuweisung darauf zuzugreifen versuchen. Dies gilt auch für Objekte (obwohl Sie sie zunächst auf null initialisieren können).

Wenn Sie wissen möchten, ob Sie von Ihrer ursprünglichen Zuweisung geändert haben, dann nein, es gibt keine Möglichkeit, dies direkt zu sagen, es sei denn, die anfängliche Zuweisung ist auf einen Sentinel-Wert, der bei einer nachfolgenden Zuweisung nicht wiederholt wird. Wenn dies nicht der Fall ist, benötigen Sie eine zusätzliche bool zu verfolgen.

Verwandte Themen