为什么要使用int的默认运算符?不一致?

问题描述 投票:0回答:1

为什么default返回不同的值?是否因为空合并运算符?

代码(FYI .Dump()来自LinqPad):

void Main()
{
    Foo foo = null;
    int? a = default;
    a.Dump("a"); // returns null

    a = foo?.Bar ?? default;
    a.Dump("a"); // returns 0

    a = foo?.Bar ?? default(int?);
    a.Dump("a"); // returns null

    (foo?.Bar is null ? default : "ADsf").Dump();
}

class Foo
{
    public int? Bar { get; set; }
}
c# .net default-value
1个回答
1
投票

对于这里的简单变量声明语句:

int? a = default;

default始终是变量分配类型的默认值。由于您已明确声明a具有int?的类型,因此default将等于default(int?)

可为空的值类型的空合并(??)将尝试返回非空值类型(您的典型结构,在这种情况下为int)。

因此在此示例中:

a = foo?.Bar ?? default;

[default将等于default(int),因为它试图通过运算符返回int对象。

在此示例中:

a = foo?.Bar ?? default(int?);

因为default(int?)返回类型为int?的对象,它将强制将左手强制转换为int?,或者将int?强制强制转换为int。由于int被隐式转换为int?,因此在这种情况下,空合并运算符将考虑返回int?

© www.soinside.com 2019 - 2024. All rights reserved.