我试图复制应用于值类型的空原谅代码,但它不会生成任何警告:
dotnetfiddle.net
.在实际代码中,我收到了一个警告。我实际上是在用编译。NET内核6.0。
我在一个代码库中得到了多个编译时警告,其中一些警告与空原谅代码有关。我试着用其中一种
SomeNullableValue.Value
或
SomeNullableValue!
,但编译器抱怨我可能及格了
null
以两种方式将参数转换为函数。
我现在处理的案子是一个
enum
最初为空,但稍后在同一控制流中分配;在这种情况下,是这样的
Ast.ContStmtTarget? t
哪里
Ast.ContStmtTarget
枚举
:
NextToken();
Ast.ContStmtTarget? t = null;
if (CurrentToken.Type == Token.Keyword) {
switch (CurrentToken.StringValue) {
case "do": t = Ast.ContStmtTarget.Do; break;
case "for": t = Ast.ContStmtTarget.For; break;
case "loop": t = Ast.ContStmtTarget.Loop; break;
case "while": t = Ast.ContStmtTarget.While; break;
}
}
if (!t.HasValue) {
FatalError(0x80A0400, GetTokenSpan());
}
r = new Ast.ContStmt(t.Value);
r = ...;
,列指向
t.Value
.此外
Ast.ContStmt
构造函数接受一个不可为空的值(
枚举
).
...\Parser.cs(1410,38): warning CS8629: Nullable value type may be null.
我已经把可编译项目放到GitHub上了(
dotnet build
):