Bul*_*ull 5 .net c# dbnull casting nullable
今天我和一位同事进行了这次有趣的讨论.我们在C#中讨论两段代码.
代码片段1:
if(!reader.IsDBNull(2))
{
long? variable1 = reader.GetInt64(2)
}
Run Code Online (Sandbox Code Playgroud)
代码片段2:
long variable1 = reader.IsDBNull(2) ? (long?) null : reader.GetInt64(2)
Run Code Online (Sandbox Code Playgroud)
问题是:将null转换为可空的long是一个好习惯吗?或者你宁愿使用传统的if语句来避免强制转换null为可空的长.
Wor*_*mbo 15
的表达(type?)null,default(type?)并new Nullable<type>()最终被编译成相同的操作码:
long? x = (long?)null;
long? y = default(long?);
long? z = new Nullable<long>();
Run Code Online (Sandbox Code Playgroud)
变成了:
IL_0001: ldloca.s x
IL_0003: initobj valuetype [mscorlib]System.Nullable`1<int64>
IL_0009: ldloca.s y
IL_000b: initobj valuetype [mscorlib]System.Nullable`1<int64>
IL_0011: ldloca.s z
IL_0013: initobj valuetype [mscorlib]System.Nullable`1<int64>
Run Code Online (Sandbox Code Playgroud)
换句话说,如果您正在使用可空类型,您可以自由使用您最喜欢的版本.但请注意,您应该尽量避免使用可空类型的算术.如果要从条件表达式返回可为空的值,则如果其中一个可以为null,则两个可能的结果必须是可为空的.在这种情况下,任何其他方式都可能导致异常.
| 归档时间: |
|
| 查看次数: |
15876 次 |
| 最近记录: |