2016-07-17 7 views
-3

(Schluchzend aus Frustration) LesenWie NRE zu vermeiden, wenn das Tag einer Taste C#

Wie sehen Sie in diesem Fall ärgerlich NRE vermeiden? Die Ausgabe des Codes ist korrekt, aber ich möchte die NRE loswerden.

Hintergrund:

Es gibt einige Tasten auf einem Formular, von denen einige Sitze von einem Klassenzimmer darstellen. Die anderen Tasten sind irrelevant, weil ich nur die Sitzknöpfe brauche und nur die Sitzknöpfe Tags haben, die Wert haben.

Also ich Schleife durch alle Tasten und lesen Sie ihre Tags, wenn es nicht leer ist, dann halten Sie diese Schaltfläche in einer Liste. Der Rest wird ignoriert.

Wenn jedoch der Code ausgeführt wird, erscheint NRE in der vierten Zeile, die Zeile beginnt mit "try".

foreach (Button seatbutton in this.Controls) 
{ 
    string betta; 
    try { betta = seatbutton.Tag.ToString(); } 
    catch { betta = ""; } 

    if (!string.IsNullOrEmpty(betta)) 
    { 
    seatbuttons.Add(seatbutton); 
    } 
} 

Dies ist das kürzeste, einfachste Beispiel für diese Art von NRE in meinem Code. Es gibt mehrere mehr.

Ich habe das Internet gesucht, und die meisten Antworten gehören zu den Zeilen: "Bad Coding Gewohnheiten verursacht dies."

Wie Sie wahrscheinlich sagen können, bin ich ziemlich neu in dieser ganzen Sache und habe noch nicht einmal die Zeit gehabt, Gewohnheiten zu entwickeln. Kannst du helfen? Vielleicht mit ein paar Tipps für gute Programmiergewohnheiten?

T_T danke!

+0

@MickyD Ja! Ich habe das gelesen, bevor ich gefragt habe: D. Und ich verstehe das seatbutton.Tag ist manchmal null. Aber was ich nicht verstehe, ist, warum man diesen Null-Wert einer String-Variablen nicht zuordnen kann ... Nun, ich kann das ganz klar, weil ich das im "Catch" -Teil gemacht habe ...: S – Momom0

+2

@ Momom0 Das machst du nicht. Sie rufen zuerst 'ToString()' auf und Sie können die Methode nicht für eine 'Null'-Referenz aufrufen. –

+0

_ "warum die Zuweisung dieses NULL-Werts an eine Zeichenfolgenvariable nicht möglich ist" _ - Nun, Sie können, aber Sie können dann nicht versuchen, eine Instanzmethode darauf aufzurufen. Das ist nicht Ziel-c – MickyD

Antwort

0

Sie müssen überprüfen, ob die tagnull ist, bevor Sie die ToString() Methode darauf aufrufen. Etwas wie folgt aus:

string betta = seatbutton.Tag == null ? "" : seatbutton.Tag.ToString(); 
if (betta == "") { 
    seatbuttons.Add(seatbutton); 
} 

Wenn Sie die neueste VS/C# verwenden, dann können Sie alternativ den neuen Operator verwenden:

string betta = seatbutton.Tag?.ToString(); 
if (!string.IsNullOrEmpty(betta)) { 
    seatbuttons.Add(seatbutton); 
} 
+0

Wow ~ das war schön! Vielen Dank! Habe diese Syntax noch nie gesehen, aber es funktioniert perfekt. Und anscheinend waren meine anderen NREs von diesem Spawn. Sobald du das gelöst hast, waren alle anderen weg! VIELEN DANK! – Momom0

Verwandte Themen