2010-11-18 13 views
0

Ich habe aspx Seite, auf die ich so etwas habe:seltsame Ausnahme in ASPX-Seite

<% 
    string image; 
    if(cond) 
     image = "somestring"; 
%> 

... 

<% if (cond) { %> 
    <img src="<%= image %>" /> <!-- HereI get CS0165 exception: Use of unassigned local variable 'image' --> 
<% } else { %> 
    <div> ... </div> 
<% } %> 

Also meine Frage ist, warum ich die Ausnahme bekommen? Wenn ich schreibe string image = ""; geht diese Ausnahme weg. Das ist sehr seltsam. Ich nehme an, dass die Ausnahme etwas mit der Darstellung der aspx-Seite zu tun hat. Kann jemand erklären, warum das passiert?

+0

Wenn Sie wirklich wissen möchten, wie Ihre Seite kompiliert wird, können Sie MVC so konfigurieren, dass die Ansicht beim Erstellen kompiliert wird. Es kann sehr aufschlussreich sein, die Fehler in einem bekannteren Kontext zu sehen: http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc – spender

Antwort

1

Wenn Sie nach dem Grund sind eher als die Lösung (die Sie bereits wissen) - wenn Sie deklariere eine Variable nichts passiert. Nur wenn Sie etwas zuweisen, reserviert der Compiler Speicherplatz und alles.

Der Versuch, auf Variablen zuzugreifen, die noch nicht initialisiert sind, ist nicht gültig, da nirgends im Speicher der Maschine zu finden ist ... da ist noch nichts.

Es ist wie der Versuch, einen Eimer zu heben, der nicht da ist: Es ist kein leerer Eimer ... es ist kein voller Eimer .. es gibt keinen Eimer zum Anheben.

+0

Danke für die Details, ich kann nicht viele Informationen darüber finden, wie C# -Compiler funktioniert – devfreak

8

Wenn Sie Ihre Variable image deklarieren, geben Sie ihr einen Anfangswert.

string image = ""; 

Der Fehler, den Sie bekommen zeigt an, dass die Variable in allen Fällen noch nicht initialisiert wurde (es wird nur initialisiert, wenn cond wahr ist).

Dies hat nichts damit zu tun, in einer ASPX-Seite enthalten zu sein. Sie erhalten den gleichen Fehler in einem Code dahinter.

+0

Danke. Ich komme aus dem C++ Land, da hast du die volle Kontrolle über dieses Personal, ich denke ich muss mich an alle Einschränkungen in C# gewöhnen. – devfreak

+3

Viele der Vorteile von "Vollkontrolle" bedeuten einfach, dass Sie sich mit einem Zielfernrohr in den Fuß schießen können. Es ist keine Einschränkung ... der Compiler macht dir hier einen großen Gefallen. – spender

+1

+1 zu spender. Der Compiler hilft dir nicht, dumme Fehler zu machen. Was Sie Einschränkung nennen, nenne ich Automatisierung von alltäglichen Aufgaben. – Chev

1

Oder noch besser wäre ein anderes zu Ihrer hinzufügen, wenn auf den Standardwert zu setzen:

string image; 
if(cond) 
    image = "somestring"; 
else 
    image = String.Empty; 
+0

Ja, das ist etwas besser, weil wir auf diese Weise eine weniger Zuweisung haben. Danke – devfreak

+0

@devfreak Sie können 0 Zuweisungen haben, indem Sie die Bild-Server-Seite dann seine Quelle direkt setzen: if (cond) Image1.Src = "somestring"; sonst Image1.Src = "somethingselse"; –

Verwandte Themen