我寧願不投null
值(它看起來很奇怪我):
long? variable1 = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
另一種選擇:
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));
它的味道只是此事。我認爲第一選擇比其他選項更具可讀性。
UPDATE:還考慮寫一些擴展方法,使你的代碼更加清晰:
public static class DataReaderExtensions
{
public static long? GetNullableInt64(this IDataReader reader, int index)
{
if (reader.IsDBNull(index))
return null;
return reader.GetInt64(index);
}
}
在這種情況下,您不使用三元操作符(不鑄件可空),並讀取值從讀者看起來更漂亮:
long? variable1 = reader.GetNullableInt64(2);
那麼演員陣營是你使用的條件運算符,它需要分支的返回類型是類似的,snippet2是編譯器錯誤,你需要它是'長? variable1' – V4Vendetta
正如V4Vendetta所說,在你的第二個片段中,你的lh和rh類型是不同的。 –
在snippet1中,'variable1'只存在於'if'的範圍內。 – comecme