Null-forgiving 运算符导致可空类型
Null-forgiving operator results in nullable type
我有一个带有 属性 <Nullable>enable</Nullable>
的 .NET 6.0 C# 控制台项目。其中,我有以下内容,其中 Span
是原始数据类型:
sealed class PrivateParser {
private void FatalError(int msgId, Span span /*, ...*/) {
/* ... */
}
}
当我调用 FatalError()
时,立即原谅第二个参数中的空值:
FatalError(0x80A0400, id.Span!);
编译器输出:
error CS1503: Argument 2: cannot convert from
'ShockBasic.Semantics.SourceData.Span?' to
'ShockBasic.Semantics.SourceData.Span' [C:\Users\hando\Documents\shockbasic\sb\ShockBasic.Compiler.csproj]
参见Microsoft docs,运算符应该return非可空类型,因此我有点迷茫。
为了重现它,完整的项目在这个 GitHub commit 中。 运行 dotnet build
可以看看最后的错误。地点
我有一个带有 属性 <Nullable>enable</Nullable>
的 .NET 6.0 C# 控制台项目。其中,我有以下内容,其中 Span
是原始数据类型:
sealed class PrivateParser {
private void FatalError(int msgId, Span span /*, ...*/) {
/* ... */
}
}
当我调用 FatalError()
时,立即原谅第二个参数中的空值:
FatalError(0x80A0400, id.Span!);
编译器输出:
error CS1503: Argument 2: cannot convert from
'ShockBasic.Semantics.SourceData.Span?' to
'ShockBasic.Semantics.SourceData.Span' [C:\Users\hando\Documents\shockbasic\sb\ShockBasic.Compiler.csproj]
参见Microsoft docs,运算符应该return非可空类型,因此我有点迷茫。
为了重现它,完整的项目在这个 GitHub commit 中。 运行 dotnet build
可以看看最后的错误。地点