ziehe ich es nicht null
Wert werfen (es mir seltsam aussieht):
long? variable1 = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
Weitere Optionen:
long? variable1 = reader.IsDBNull(2) ? default(long?) : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? (long?)null : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new Nullable<long>() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new long?() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? null : new long?(reader.GetInt64(2));
Es ist nur die Frage des Geschmacks. Ich denke, die erste Option ist lesbarer als andere.
UPDATE: Stellen Sie sich auch einige Erweiterungsmethoden Schreiben Sie den Code deutlicher zu machen:
public static class DataReaderExtensions
{
public static long? GetNullableInt64(this IDataReader reader, int index)
{
if (reader.IsDBNull(index))
return null;
return reader.GetInt64(index);
}
}
In diesem Fall, dass Sie nicht verwenden ternären Operator (kein Casting NULLABLE), und Lesewerte von Lesern mehr sehen recht:
long? variable1 = reader.GetNullableInt64(2);
Nun, die Besetzung ist für den Conditional Operator, den Sie verwenden, muss der Rückgabetyp der Zweige ähnlich sein und snippet2 ist Compiler-Fehler Sie brauchen es zu "long"? variable1' – V4Vendetta
Wie V4Vendetta sagte, sind in Ihrem zweiten Snippet Ihre lh- und rh-Typen unterschiedlich. –
In snippet1 existiert 'variable1' nur innerhalb des Bereichs 'if's. – comecme