NetCore 6 - 将 null 文字或可能的 null 值转换为不可为 null 的类型

Mig*_*ura 4 c# .net-core asp.net-core c#-10.0

我将项目更新到 NetCore 6,但收到警告:

Converting null literal or possible null value to non-nullable type.
Run Code Online (Sandbox Code Playgroud)

例如在单元测试中:

String source = null;
String expect = null;

String actual = source.ToSafeBase64Url(); 
Run Code Online (Sandbox Code Playgroud)

我在代码的多个地方收到此警告。

我应该如何解决这个问题?

Dav*_*idG 6

在新的 .NET6 模板中,默认情况下启用可为null 的引用类型。如果打开 csproj 文件,您可以看到这一行:

<Nullable>enable</Nullable>
Run Code Online (Sandbox Code Playgroud)

该警告告诉您正在将 null 分配给不可为 null 的类型。要修复此问题,请将字符串设为可为空:

string? source = null;
string? expect = null;
Run Code Online (Sandbox Code Playgroud)

  • 自 1817 年起至今,字符串都接受 null 值。我缺少什么?也许是更明确的代码之类的东西? (3认同)
  • 我这样做了,但我的扩展方法也收到了“null”警告:“source.ToSafeBase64Url()”。我可以将该方法更改为:“String FromSafeBase64Url(this String? source)”?...我不确定要遵循的路径,因为这会影响我的代码中的许多方法。 (2认同)
  • 答案并不能解决问题..只需将问题移至代码的另一点:( 例如,当我配置 IS4 `policy.RequireClaim("scope", options.ApiScope);` 时,我收到警告 `ApiScope 可能是null here`。在我的例子中,`ApiScope`永远不会为空,那么为什么我应该将它设置为可为空呢? (2认同)