preferisco non lanciare null
valore (sembra strano per me):
long? variable1 = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
Un'altra possibilità:
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));
E 'solo la questione di gusti. Penso che la prima opzione sia più leggibile di altre.
UPDATE: Si consideri inoltre scrivendo alcuni metodi di estensione per rendere il codice più chiaro:
public static class DataReaderExtensions
{
public static long? GetNullableInt64(this IDataReader reader, int index)
{
if (reader.IsDBNull(index))
return null;
return reader.GetInt64(index);
}
}
In questo caso non si utilizza operatore ternario (senza casting per nullable), e la lettura dei valori dal lettore appare più abbastanza:
long? variable1 = reader.GetNullableInt64(2);
fonte
2012-05-17 10:29:18
Bene il cast è per l'operatore condizionale che si utilizza, ha bisogno del tipo di restituzione dei rami per essere simile e snippet2 è errore del compilatore è necessario che sia 'lungo? variable1' – V4Vendetta
Come ha detto V4Vendetta, nel tuo secondo frammento i tuoi tipi lh e rh sono diversi. –
In snippet1, 'variable1' esiste solo all'interno dell'ambito' if'. – comecme