gpt4 book ai didi

c# - CLR 中的空引用检查

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:34 25 4
gpt4 key购买 nike

C#中CLR空引用检查的一些问题

考虑一下:

class CS
{
public int X;
}

void Foo(CS c)
{
c.X += 10;
}

CS c = default(CS);

Foo(c);

显然这里抛出了 NullReferenceException。

现在 CS 变成了一个结构体

struct CS { public int X; }

CS c = default(CS);

Foo(c);

现在没有抛出异常

然后 Foo 变为采用 ref CS cs 参数。

void Foo(ref CS c) { c.X += 10; }

同样也不异常(exception),因为 CS 仍然是一个结构。

现在是问题。

  1. CLR 是否为类对象的每个字段引用生成“if (x == null)”语句,或者它是如何生成的?
  2. 当参数是结构时,CLR 是否对 ref 参数执行相同的操作?
  3. 当 CS 是一个结构时,是否可以为 CS 参数获取 null?

最佳答案

结构是值类型,因此它们不为空。 (您必须将其设为 Nullable<CS>,因为值类型不能为 null - 请参阅 Nullable docs)

default(CS)是一个结构,其中 X (另一种值类型)是 0 (或更准确地说,default(int) )。结构中的所有字段都初始化为 default(FieldType) .

有关结构的更多信息,请查看 the documentation .

关于c# - CLR 中的空引用检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343176/

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