作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天我和一位同事进行了这个有趣的讨论。我们正在讨论 C# 中的两段代码。
代码片段 1:
if(!reader.IsDBNull(2))
{
long? variable1 = reader.GetInt64(2)
}
代码片段 2:
long variable1 = reader.IsDBNull(2) ? (long?) null : reader.GetInt64(2)
问题是:将 null 转换为可为 null 的 long 是一种好习惯吗?或者您宁愿使用传统的 if 语句来避免将 null
转换为 nullable long。
最佳答案
表达式 (type?)null
, default(type?)
和 new Nullable<type>()
最终被编译成相同的操作码:
long? x = (long?)null;
long? y = default(long?);
long? z = new Nullable<long>();
变成了:
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>
换句话说,如果您正在使用可空类型,您可以自由使用您最喜欢的版本。但是请注意,您应该尽量避免使用可空类型的算术。如果要从条件表达式返回可为 null 的值,如果其中一个可以为 null,则两个可能的结果都必须为 null。在这种情况下,任何其他方式都可能导致异常。
关于c# - 将 null 转换到某物中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10633946/
当我在我的 Angular 应用程序中创建一个常量时,我想访问一个 $injectable。 这样的事情可能吗?注入(inject)剂如何申报? myApp.constant('myCon
我正在尝试提取称为tests.stats()的个人功能的输出 我用return语句创建一个函数: return(c(list.test.1, list.test.2 ,list.test.3,
我是一名优秀的程序员,十分优秀!