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.
Verwenden Sie den Operator null-coalescing : ??
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.
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% Wenn Ihre Zeichenfolge Nullwerte enthalten kann, müssen Sie den Wert überprüfen, der von SqlDataReader
gegen DBNull.Value
zurückgegeben wird:
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:
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%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
Verwenden Sie die folgende Codezeile:
%Vor%anstelle der folgenden Zeile:
%Vor%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.