2017-05-29 2 views
-1

Ich habe eine Zeichenfolge TempDayValues[j], die einen Nullwert hält erkennen, aber die folgenden zwei Beispiele erkennen nicht die nullWie ein Null-Stachel

string Temp = TempDayValues[j].Trim(); 
if (string.IsNullOrEmpty(Temp)) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

If(Temp == null) 
{ 
    //code here 
} 

Gibt es eine bessere Art und Weise null Werte zu erkennen?

+7

Wenn Sie '.Trim()' in der Zeichenfolge ohne eine 'NullReference' ausgeführt haben, ist Ihre Zeichenfolge nicht null. Vielleicht suchen Sie nach "IsNullOrWhiteSpace" - für leere leere oder weiße Leerzeichen? –

+0

Eigentlich sollte die erste Zeile eine NullReferenceException werfen, wenn der Wert hinter [j] null ist. Weil Sie '.Trim' auf einem Nullwert aufrufen. Wenn es keine Ausnahme auslöst, ist Ihr Wert hinter [j] offensichtlich nicht null. – ckruczek

+0

Dies kann weder eine leere Zeichenfolge noch eine leere Zeichenfolge sein. Wenn Sie Trim in einer Nullzeichenfolge aufrufen, erhalten Sie eine Ausnahme. Und string.IsNullOrEmpty ist der richtige Weg, um nach diesem Fall zu suchen. Es ist also etwas anderes bei der Arbeit hier. Verwenden Sie den Debugger, um zu überprüfen, was der Wert von Temp ist – Steve

Antwort

3

Im Vergleich mit null ist die Art und Weise zu überprüfen. Wenn Sie jedoch in Ihrem Code keine NullReferenceException beim Aufruf von Trim erhalten haben, ist Ihre Zeichenfolge nicht null.

könnte sein, dass Sie für IsNullOrWhiteSpace suchen:

if (string.IsNullOrWhiteSpace(TempDayValues[j])) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

Wenn Sie zum ersten Mal wollen überprüfen, ob es null ist und ein Verhalten und eine andere, wenn es leer/Leerraum ist:

if(TempDayValues[j] == null) 
{ 
    // code 
} 
else if(TempDayValues[j].Trim() == string.Empty) 
{ 
    // code 
} 
0

Ihre Frage, obwohl gültig, fehlt eine Erklärung dessen, was Sie erreichen möchten. Da Sie nur nach Null-Überprüfung gefragt haben; Meine Antwort konzentriert sich nur auf die Nullprüfung, die in Ihrem Code-Snippet durchgeführt wird.

Es gibt ein paar Dinge, die Sie über Ihren Code bemerken sollten, die Ihnen helfen werden, die Situation besser zu verstehen.

String Temp = TempDayValues[j].Trim(); 

Es ist interessant zu sehen, dass Sie bereits .Trim() auf der Saite genannt haben. Wenn TempDayValues[j] null war, würde dies eine Ausnahme auslösen. Sie können Methoden nicht für Nullwerte aufrufen (Sie können auch nicht auf Eigenschaften und Felder mit einem Nullwert zugreifen).

Wenn Ihre Anwendung keine Ausnahme auslöst; was ich annehme, ist es nicht, wie du es nicht erwähnt hast; dann haben Sie implizit bereits "bewiesen", dass Ihre Zeichenkette nicht null ist. Weil Sie sonst eine Ausnahme bekommen würden.

Beachten Sie auch, dass .Trim() nie etwas null machen wird. Da Sie nur prüfen möchten, ob TempDayValues[j] Null ist (und möglicherweise den Wert überschreiben, aber niemals mit der Wert); Es ist funktional irrelevant, .Trim() zum Zweck der Nullkontrolle zu verwenden.

Nehmen wir für den Rest der Erklärung an, dass es möglich ist, dass Ihre Zeichenfolge null ist; obwohl .Trim() es in Ihrem Beispiel unmöglich gemacht hat.

if (string.IsNullOrEmpty(Temp)) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

Ihr, wenn Block wird ausgeführt, wenn die Zeichenfolge null ist, aber auch, wenn es leer ist. Sie rufen schließlich die Methode string.IsNull OrEmpty(). Eine leere Zeichenfolge ist eine Zeichenfolge, die nicht null ist, aber auch keine Zeichen enthält.

So eine richtigere Nachricht wäre "Null oder leere Zeichenfolge gefunden".

if(Temp == null) 
{ 
    //code here 
} 

Dies ist eine gültige Methode zur Überprüfung auf Null; Der If-Block wird nicht ausgeführt, wenn Ihre Zeichenfolge leer ist. Dies könnte das sein wonach Sie suchen. In den meisten Fällen würde ich erwarten, dass String.IsNullOrEmpty() besser geeignet ist; aber mir ist der spezifische Zweck Ihres Codes nicht bekannt.

Hier wäre es richtig zu sagen, dass Sie "null" und KEINE leere Zeichenfolge gefunden haben.


Das sagte; Was ist die Antwort auf dieses Problem?

Dies ist nicht einfach zu beantworten; weil Sie die Absicht des Codeausschnitts nicht erklärt haben. Ich werde eine Code-Verbesserung anbieten, das ist das Beste, was ich Ihnen ohne weitere Informationen geben kann.

string Temp = TempDayValues[j]; 
if (string.IsNullOrEmpty(Temp)) //use Temp == null here if you don't want it to trigger on empty strings. 
{ 
    Console.WriteLine("Found Null or empty string"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

bearbeiten Wenn Sie auch diese Option, wenn Block für Fälle ausgeführt werden, wenn die Zeichenfolge nicht null ist, nicht leer ist, aber es Leerzeichen enthält nur; dann ist es relevant, .Trim() zu rufen. In diesem Fall Ihren ändern, wenn Block:

if (string.IsNullOrEmpty(Temp) || string.IsNullOrEmpty(Temp.Trim())) 

Wenn Temp null ist, werden nur der linke Operand wird ausgeführt (weil es das Auswertungsergebnis true unabhängig von den rechten Operanden macht).
Der rechte Operand wird nur ausgeführt , wenn Ihre Zeichenfolge nicht bereits null oder leer ist. In diesem Fall können Sie nach einer Zeichenfolge suchen, die nur Leerzeichen enthält.

+0

Danke allen. Ihre Kommentare haben mir geholfen, zu erkennen, dass dort eine Schnur sein muss. Kannst du glauben, dass das Feld in den Daten die Zeichenfolge "null" enthielt !!. Verwirrt mich seit Tagen. Ich werde immer lernen – Tim