gpt4 book ai didi

c# - CLR 如何在为结构分配空值时绕过抛出错误?

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

我试图理解这段代码中的一件事:

Nullable<Int32> x = 5;
Nullable<Int32> y = null;
Console.WriteLine("x: HasValue={0}, Value={1}", x.HasValue, x.Value);
Console.WriteLine("y: HasValue={0}, Value={1}", y.HasValue, y.GetValueOrDefault());

输出是:

x: HasValue=True, Value=5
y: HasValue=False, Value=0

还有当你通过null时我不明白的事情至 y , 我相信它叫 public static implicit operator Nullable<T>(T value)但是这个方法的定义初始化了一个传递value的新结构这是分配null但是构造函数方法不检查它是否为 null 所以它可以分配 default(T)value .

为什么我们甚至可以在这里将 null 分配给结构并且它工​​作正常?

你们能告诉我我在这里遗漏了什么吗?我不明白它是如何绕过 null 的并返回默认值。

可空代码内部定义:

http://codepaste.net/gtce6d

最佳答案

believe it calls public static implicit operator Nullable(T value)

不,它不是,因为在这种情况下 TInt32,而 null 不是 Int32。它只是将 y 变量保留为默认值,这意味着对于一个结构,所有字节都是 0。这会产生一个具有返回 falseHasValue 的结构。

您不能真正将 null 传递给结构,但 C# 编译器会为您将其转换为默认初始化。

关于c# - CLR 如何在为结构分配空值时绕过抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867088/

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