参数类型后面的问号是引用类型的目的是什么?
OverflowException例如包含string?和参数的构造函数之一Exception?:
public OverflowException(string? message, Exception? innerException);
Run Code Online (Sandbox Code Playgroud)
我认为将它们标记为可为空没有意义,因为它们不是值类型,因此默认情况下它们是可为空的。
重点是什么?这是否意味着不同的事情?
注意,值类型后面有一个问号的目的是什么(例如:int?myVariable)?描述值类型的行为 - 本质上是允许值类型为空值,但引用类型不需要这样做,因为它们已经可以包含空值。
Erm*_*ary 17
在 C# 8.0 中,引入了可为 null 的引用类型?- 这允许您通过附加到类型名称来将引用类型标记为可为 null。
在空状态分析中,静态检查代码以跟踪引用的空状态。此分析可能会导致以下 2 种状态之一:
not-null - 变量具有非空值
Maybe-null - 变量可以为 null 或 not-null;分析仪无法确定
这很有用,因为它可以帮助编译器提供警告,帮助您编写不易被NullReferenceExceptions其他 API 使用且更容易被其他 API 使用的代码。
例如,编译器将发出以下警告。
#nullable enable
...
string message = null;
// Warning - CS8602 Dereference of a possibly null reference
Console.WriteLine(message.Length);
Run Code Online (Sandbox Code Playgroud)
这是因为由于message设置为 null,其状态被跟踪为Maybe-null。如果您尝试访问空对象的属性,这会发出警告以提醒您。是的,你是。
这是一个不同的例子:
#nullable enable
...
string message = "The quick brown fox jumps over the lazy dog";
// No warning
Console.WriteLine(message.Length);
Run Code Online (Sandbox Code Playgroud)
由于message已知不为 null,因此其状态设置为not-null。编译器不会产生警告,因为它知道您可以安全地取消引用该变量。它绝对不为空。
或者,您也可以决定告诉世界某些变量可以为空:)
| 归档时间: |
|
| 查看次数: |
4254 次 |
| 最近记录: |