gpt4 book ai didi

c# - 将 null 转换到某物中?

转载 作者:太空狗 更新时间:2023-10-29 22:07:27 25 4
gpt4 key购买 nike

今天我和一位同事进行了这个有趣的讨论。我们正在讨论 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com