"Verwendung nicht zugewiesener lokaler Variablen" in einer generischen Methode

7

Verwendung der nicht zugewiesenen lokalen Variablen 'model'. Ist welche Fehlermeldung ich bekomme. Es ist richtig, wo ich sage, wenn (Modell == null). Ich bin mir nicht sicher, warum es mir einen Kompilierfehler gibt .. jemand bitte helfen.

%Vor%     
Evan Larsen 06.02.2011, 00:25
quelle

4 Antworten

15

Wie der Fehler angibt, können Sie eine lokale Variable erst verwenden, wenn der Compiler nachweisen kann, dass ihm ein Wert zugewiesen wurde.

Wenn in Ihrem Fall die Bedingung if falsch ist, wird die Variable model niemals zugewiesen.

Sie können das Problem lösen, indem Sie ihm zuerst einen Wert zuweisen:

%Vor%

Beachten Sie, dass, wenn T ein Strukturtyp ist, model == null niemals wahr sein kann.

Sie sollten Ihren Code in

ändern %Vor%     
SLaks 06.02.2011, 00:31
quelle
3

Der Compiler weiß nicht, was zugewiesen werden soll, bis Sie es ihm mitteilen.

Anstelle von T model; verwenden Sie T model = default(T);

Weitere Informationen: Ссылка

edit: Eine andere Möglichkeit besteht darin, die neue Anweisung vor den Deserialisierungsblock zu stellen. Auf diese Weise haben Sie entweder ein neues Objekt oder das deserialisierte Objekt, so wie Sie es jetzt haben.

    
Jim Schubert 06.02.2011 00:29
quelle
3

Beim Arbeiten mit lokalen Variablen muss ihnen immer ein Wert zugewiesen werden, bevor auf sie zugegriffen wird.

Der Grund dafür ist, dass der Entwickler, wenn er die Initialisierung auslässt, normalerweise auf die Runtime angewiesen ist, um ihm seinen Standardwert zuzuweisen, aber falls er dies vergessen sollte, kann dies einige unnötige Fehler verursachen.

Wenn Sie mit Generika arbeiten und nicht angeben, ob Sie eine ReferenceType oder eine ValueType erwarten, können Sie sie nicht einfach initialisieren, indem Sie null zuweisen. In diesem Fall müssen Sie das default -Schlüsselwort verwenden .

Dies initialisiert die Variable für Referenztypen auf null oder weist 0 für numerische Werttypen zu. Für Strukturen wird jedes Mitglied auf seinen Standard initialisiert.

In dem von Ihnen geposteten Beispiel lässt der Vergleich mit null vermuten, dass diese Methode möglicherweise nur für ReferenceTypes gedacht ist. Wenn dies der Fall ist, fügen Sie am besten auch die class -Einschränkung hinzu.

    
Yannick Motton 06.02.2011 01:08
quelle
1

Da model eine lokale Variable ist, gibt Ihnen der Compiler diesen Fehler, weil er nur in der if-Anweisung zugewiesen ist. Wenn die Bedingung if nicht erfüllt ist, wird model kein Wert zugewiesen. Versuchen Sie, ihm den Standardwert null zuzuweisen oder fügen Sie eine else-Anweisung hinzu und weisen Sie ihm model zu.

%Vor%

Lokale Variablen werden nicht automatisch initialisiert, aber Instanzvariablen sind.

%Vor%     
Zach Johnson 06.02.2011 00:26
quelle

Tags und Links