2016-07-20 10 views
0

Warum String.Trim() eine Ausnahme auf string.empty wirft, wenn es in einem Razor sehen wie folgt verwendet:String.Trim() in Razor Ansicht

console.log('@Model.Test.FirstOrDefault().Trim()'); 

(die Liste leer ist, so bekomme ich string.empty) und dann:

Server Error in '/' Application. 
Object reference not set to an instance of an object. 
(...)' 
Line 326:   console.log('@Model.Test.FirstOrDefault().Trim()'); 
+0

Sie wahrscheinlich auf null – Adil

+4

Wahrscheinlich Trim rufen 'FirstOrDefault' zeitigt' null', und nicht eine leere Zeichenfolge. – npinti

+0

console.log ('Ergebnis:' + '@ Model.Institution.FirstOrDefault()'); gibt mir: 'result:' in der Konsole – Carlos28

Antwort

4

Wenn die Liste leer ist, wie Sie sagen, dann werden Sie keine string.Empty aber eine null erhalten, da der Standardwert des ersten Elements einer leeren Liste von Strings null ist und Sie können .Trim() nicht anrufen ein Nullobjekt

Wenn Sie mit C# 6 dann Sie so etwas tun könnte:

console.log('@Model.Test.FirstOrDefault()?.Trim()'); 

Notiere die Zugabe von ein Fragezeichen vor dem .Trim(), die in so dass trim einen Null-Check setzt nur, wenn aufgerufen werden Die linke Seite ist nicht null.

Alternativ könnten Sie tun:

console.log('@(Model.Test.FirstOrDefault() ?? string.Empty).Trim()'); 

den Null Koaleszierstruktur Operator nutzen explizit die Null mit einem string.Empty zu ersetzen und in früheren Versionen von C#

0

Sie haben wahrscheinlich null irgendwo verfügbar ist. Sie können es leicht zu überwinden, indem elvis Operator in C# 6:

console.log('@Model.Test?.FirstOrDefault()?.Trim()??"Null property"'); 
+0

Überbeanspruchung der?. operator - Es kann zu fehlerhaftem Code führen. Verwenden Sie es nur, wenn Sie wissen, dass ein Nullwert vorhanden ist, mit dem Sie auf eine bestimmte Weise umgehen möchten. –

+0

Ich glaube nicht, dass das übermäßig ist? Die Linie ist klar. Er möchte den Zeichenfolgenwert für etwas verwenden und der Nullwert muss überprüft werden. Elvis-Operator ist da, um zu viel unerwünschten Code für Null-Überprüfung zu überspringen, wenn es keine Notwendigkeit gibt –

+0

Sie wissen, wo die mögliche Null ist (nach '.FirstOrDefault()') Die anderen Stellen, die Sie es verwendet haben, wurden nicht als wo identifiziert Der Rückgabewert ist null, oder es ist nützlich, dass Sie sich in diese Ecke gedrängt haben. Wenn er nicht Null zurückgibt (oder nie zurückgeben sollte), sollten Sie nicht nach ihm suchen, da Sie Fehler verstecken. Ihre Antwort und der nachfolgende Kommentar zeigen genau, warum ich diese Ergänzung der Sprache für eine schlechte Idee hielt. Du benutzt es zu sehr und du kannst nicht sehen, dass du es bist. Alles, was Sie getan haben, ist das alte VB OnErrorContinue-Szenario neu zu erstellen. –

Verwandte Themen