gpt4 book ai didi

c# - 在 C# 中,结构真的不能为 null 吗?

转载 作者:IT王子 更新时间:2023-10-29 04:14:29 39 4
gpt4 key购买 nike

下面是一些代码,演示了我不能将结构类型声明和初始化为 null。 Nullable type 是一个结构,为什么我可以将它设置为 null?

Nullable<bool> b = null;
if (b.HasValue)
{
Console.WriteLine("HasValue == true");
}

//Does not compile...
Foo f = null;
if (f.HasValue)
{
Console.WriteLine("HasValue == true");
}

Foo 定义为

public struct Foo
{
private bool _hasValue;
private string _value;

public Foo(string value)
{
_hasValue = true;
_value = value;
}

public bool HasValue
{
get { return _hasValue; }
}

public string Value
{
get { return _value; }
}
}

问题已得到解答(见下文)。为了澄清,我将发布一个示例。 C#代码:

using System;

class Program
{
static void Main(string[] args)
{
Nullable<bool> a;
Nullable<bool> b = null;
}
}

生成以下 IL:

.method private hidebysig static void  Main(string[] args) cil managed
{
.entrypoint
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] valuetype [mscorlib]System.Nullable`1<bool> a,
[1] valuetype [mscorlib]System.Nullable`1<bool> b)
IL_0000: nop
IL_0001: ldloca.s b
IL_0003: initobj valuetype [mscorlib]System.Nullable`1<bool>
IL_0009: ret
} // end of method Program::Main

声明了 a 和 b,但只有 b 被初始化。

最佳答案

C# 编译器为您提供了一些糖分,因此您确实在这样做:

Nullable<bool> b = new Nullable<bool>();

这是语法糖

bool? b = null;    
if (b ?? false)
{
b = true;
}

关于c# - 在 C# 中,结构真的不能为 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077453/

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