2017-01-13 3 views
0

ich ein litte Problem damit haben, wenn Aussage:C# Prüfen Sie, ob ein UILabel nicht null nicht funktionieren

if (selectedlabel.Text!=null|| selectedlabel.Text!=""|| selectedlabel!=null) 
{ 
    basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null 
} 

Warum funktioniert das nicht?

Ich habe einen Haltepunkt gesetzt, und ich sehe die selectedlabel.Text ist null:

enter image description here

+0

Haben Sie innen 'if' eingegeben? –

Antwort

1

Vor allem Sie sollte nach Nullen suchen (weil Sie versuchen, auf die Instanzfelder/Eigenschaften des Objekts zuzugreifen):

if(selectedlabel != null) 
// or 
if(!ReferenceEquals(selectedlabel, null)) 

Dann, was Sie tun Überprüfung wird nur, wenn der String null oder leer ist (auf der C# hat Buil-in-Verfahren): string.IsNullOrEmpty(selectedlabel.Text)

Jetzt müssen Sie nur noch diese verwenden && Operator verbinden, die, wenn beide überprüft sind wahr, scheitern aber, wenn die erste Prüfung false ist. Zu wissen, dass sie zurückfallen, wenn die erste Bedingung nicht erfüllt Sie diese in kombinieren:

if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    // your code here 
} 

Aber ein anderes Problem ist basketID = int.Parse(selectedlabel.Text);. Wie ich oft sage lassen Sie einige Marge für Fehler, was bedeutet, nicht davon ausgehen, dass der Benutzer ist klug (besser Weg! Immer davon ausgehen, dass der Benutzer dumm wie die Hölle ist), anstatt eine Zahl zu setzen, wird der Benutzer etwas eingeben wie "Bitte geben Sie 123 hier "und es wird Ihre Bewerbung töten.

int.TryParse(selectedlabel.Text, out basketID); 

Okay, so so etwas wie ALLE der obigen Ausführungen sollte das Ergebnis der Kombination:

if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    if(!int.TryParse(selectedlabel.Text, out basketID)) 
    { 
     // user entered text that is unconvertible to int 
    } 
} 
+0

Vielen Dank für die detaillierte Antwort! – Andreas

+0

Und danke für den Vorschlag mit int.TryParse (selectedlabel.Text, out basketID); Der Benutzer kann nichts eingeben. Es ist immer eine Nummer. Diese Nummer wird von einem UIPicker (Xamarin for IOS) generiert. Also sollte es keine Probleme geben :-) – Andreas

+1

@Andreas: Ich würde 'int.TryParse' trotzdem verwenden, weil es auch mit der Übergabe von' null' funktioniert. Dann wird der Code sehr lesbar und prägnant: 'if (int.TryParse (selectedlabel? .Text, out basketID)) {// hier wird basketID initialisiert}'. Dies behandelt sowohl, dass das Label Null ist und der Label-Text Null ist. –

6

Sie verwenden || anstelle des richtigen &&

if (selectedlabel != null && selectedlabel.Text != null && selectedlabel.Text != "") 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 

Aber das ist knapper und funktioniert auch:

if (selectedlabel != null && !String.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 

verwenden, um sicherzustellen, dass es sich um eine gültige ganze Zahl ist:

int basketID; 
if(selectedlabel != null && int.TryParse(selectedlabel.Text, out basketID)) 
{ 
    // ... 
} 

Mit C# 6 Sie auch die null-conditional operator verwenden können:

int basketID; 
if(int.TryParse(selectedlabel?.Text, out basketID)) 
{ 
    // ... 
} 
+0

Sie können auch über C# 6 erwähnen. –

+0

@ TânNguyễn: fertig –

0

Wechsel zu

if (!string.IsNullOrEmpty(selectedlabel?.Text)) 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 
0

Sie sollte if-Anweisung gleich

Um nur diesen TryParse stattdessen loszuwerden zu null, wenn Sie wollen, dass es auf Null prüft, dann sollte es das sein

if (selectedlabel.Text==null|| selectedlabel.Text!=""|| selectedlabel!=null) 
{ 
    basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null 
} 

Andernfalls wird der Fehler, den Sie vermeiden möchten, nicht angezeigt. hoffe es hilft

Verwandte Themen