Der beste Weg, um Null-Fehler beim String-Casting zu vermeiden

8
%Vor%

Ich versuche, mit der Möglichkeit umzugehen, dass das Objekt, für das ich ToString aufruft, NULL ist. Ich werde die obige Anweisung mit mehreren Variablen verwenden, und ich möchte nicht einen einzelnen Versuch / Fang für jeden einzelnen machen ... was der beste Weg ist, Null-Überprüfung für Strings zu tun.

Andere Datentypen haben das schon gemacht:

%Vor%

In diesem Code bezieht sich "Leser" auf einen SqlDataReader, aber das ist nicht wirklich wichtig für diese Frage.

    
jth41 05.04.2013, 13:35
quelle

11 Antworten

30

Verwenden Sie den Operator null-coalescing : ??

%Vor%

Wenn die Daten in Ihrem Feld DBNull.Value (anstatt null ) sind, funktioniert dies immer noch, weil DBNull.Value nicht null ist, also werden die ?? nicht verwendet und DBNull.Value.ToString() ist "" , was Sie möchten.

    
Bobson 05.04.2013, 13:39
quelle
10
%Vor%

Es wird string.Empty zurückgegeben, wenn der Wert null ist.

Quelle: Ссылка

Update: es funktioniert auch mit DBNull , ich habe gerade verifiziert.

Update 2 : Ich habe mich entschieden, einen vollständigeren Test hier zu machen, nur um sicher zu sein:

%Vor%     
Andre Calil 05.04.2013 13:41
quelle
3

Wenn Ihre Zeichenfolge Nullwerte enthalten kann, müssen Sie den Wert überprüfen, der von SqlDataReader gegen DBNull.Value zurückgegeben wird:

%Vor%

Wenn das von reader["Call Report Code"] zurückgegebene Objekt nicht ein string ist, dann ist es DBNull.Value , so dass der as Cast den Wert von _callReportCode auf null setzt auch.

Wenn Sie die Zeichenfolge auf einen Wert ungleich Null setzen müssen, falls der Datenbankwert fehlt, fügen Sie ?? hinzu, wie folgt:

%Vor%     
dasblinkenlight 05.04.2013 13:40
quelle
3

Mein Vorschlag ist, ToString niemals zu konvertieren, wenn die Daten keine Zeichenfolge sind. Wenn die Daten bereits eine Zeichenfolge sind, ist der Aufruf von ToString redundant und eine Umwandlung ist alles Erforderliche.

Ich nehme an, dass der Datentyp in der Datenbank Integer ist. In diesem Fall können Sie einen nullbaren Int. verwenden.

%Vor%

Ich habe eine Erweiterungsmethode gemacht, um genau das zu tun.

%Vor%

Verwendung

%Vor%     
Matthew 05.04.2013 13:42
quelle
1

Der einfachste Weg, den ich gefunden habe, ist

%Vor%     
CADmageren 15.05.2014 07:21
quelle
1

Ich habe eine einfache und übliche Methode.

%Vor%

in C # verwenden

%Vor%     
Neo Vijay 22.01.2016 19:01
quelle
0

Sie können eine Methode erstellen, die Sie aufrufen, wenn Sie die Prüfung durchführen möchten. Auf diese Weise müssen Sie den Versuchfang nur einmal eingeben ... oder Sie können eine Erweiterungsmethode für die String-Klasse erstellen, um dies zu tun

    
Fabio Marcolini 05.04.2013 13:39
quelle
0

_callReportCode = Convert.ToString (Leser ["Call Report Code"]) sollte sicherstellen, dass dort keine Null ist.

    
eXecute 05.04.2013 13:39
quelle
0

Verwenden Sie die folgende Codezeile:

%Vor%

anstelle der folgenden Zeile:

%Vor%     
Sanjeev Choudhary 05.04.2013 13:40
quelle
0

Ich verwende gerne eine Kombination aus dem Nullkoaleszenzoperator und null Bedingter Operator :

%Vor%

es ist im Grunde das gleiche wie das

%Vor%

aber kürzer.

    
RayLoveless 06.02.2017 17:41
quelle
-1

Sie können eine Überprüfung mit String.IsNullOrEmpty() durchführen, um sicherzustellen, dass es nicht null ist, oder Sie könnten eine Erweiterungsmethode schreiben, um eine Aktion auszuführen, wenn sie nicht null ist und ein anderes / nichts, wenn es das ist.

    
Clint 05.04.2013 13:37
quelle

Tags und Links