类成员的定义中的“?”是什么意思?[复制]

What does a "?" mean in the definition of a class member? [duplicate]

提问人:Gabriele Troviso 提问时间:9/20/2023 最后编辑:Karl KnechtelGabriele Troviso 更新时间:9/21/2023 访问量:110

问:

我熟悉使用“?”作为检查访问运算符。但是,我不明白它是如何在类成员定义中使用的。例如,在此定义中:

private Socket? newSocket;

问号表示什么?

c#

评论

6赞 Markus Zeller 9/20/2023
该属性可为 null。因此,它可以是 Socket 实例,也可以是 null。
0赞 Thomas Koelle 9/20/2023
只是一点历史背景。你可能在教科书中读到的可为 null 类型可能是 C# 2 (2006) 版本,当时如果你看到它,那是因为程序员不理解它(只为 int 等做了一些事情)。但自 C#10 (2021) 以来,它现在有意义。
2赞 nalka 9/20/2023
可能的重复项:if 是引用类型,if 是值类型Socket
1赞 Naveen Donepudi 9/20/2023
它只是可为 null 的属性,您可以传递 Socket 类实例,也可能是 null 值。

答:

1赞 papafe 9/20/2023 #1

这取决于变量的类型(如果它是引用类型还是值类型),但通常这意味着变量可以为 null。Socket

如果它是引用类型(例如类),并且启用了可为 null 的上下文,那么它只是编译器的“指示”,因为即使您将引用类型指示为不可为 null,它们也可以为 null。您可以在官方文档中找到有关此内容的更多信息。

如果它是值类型(如结构体),则意味着变量可以为 null。如果没有问号,则不可能为其分配 null。