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

Posted

技术标签:

【中文标题】NetCore 6 - 将空文字或可能的空值转换为不可为空的类型【英文标题】:NetCore 6 - Converting null literal or possible null value to non-nullable type 【发布时间】:2021-11-11 19:32:05 【问题描述】:

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

Converting null literal or possible null value to non-nullable type.

例如在单元测试中:

String source = null;
String expect = null;

String actual = source.ToSafeBase64Url(); 

我在代码的多个位置收到此警告。

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

【问题讨论】:

ToSafeBase64Url 的定义是什么?如果ToSafeBase64Url 是一个接受this String? 并返回String 的扩展方法,这将起作用,否则您需要String? actual = source?.ToSafeBase64Url() 才能获得有效代码。 ***.com/questions/53633538/… 最终应该更新为“迁移到 Net6/VS 2022 打开可空类型”(或类似的东西......)String 是不可空类型...... 【参考方案1】:

在新的 .NET6 模板中,nullable reference types 默认启用。打开csproj文件就可以看到这一行:

<Nullable>enable</Nullable>

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

string? source = null;
string? expect = null;

【讨论】:

我这样做了,但我的扩展方法上也收到了null 警告:source.ToSafeBase64Url()。我可以将方法更改为:String FromSafeBase64Url(this String? source)? ...我不确定要遵循的路径,因为这会影响我代码中的许多方法。 嗯,是的,您也需要对扩展方法应用相同的 null-prevention。 字符串从 1817 年开始接受空值,直到今天仍然如此。我错过了什么?可能是更明确的代码? 答案并不能解决问题..只需将问题移到代码的另一点即可:(例如,当我配置 IS4 policy.RequireClaim("scope", options.ApiScope); 时,我收到警告 ApiScope could be null here。就我而言, ApiScope 永远不会为空,那我为什么要把它设置为可空呢?

以上是关于NetCore 6 - 将空文字或可能的空值转换为不可为空的类型的主要内容,如果未能解决你的问题,请参考以下文章

access中查询出来值的为空,如何将空值改为0,具体表达式是啥,从啥地方输入表达式,多谢

r 将空值转换为NA

将 0 和 1 (float64) 转换为布尔值时将空值转换为 True [重复]

ssis 空日期作为空值

Hive/Bigsql Pandas 将浮点数转换为整数,使用 pyarrow 将空值转换为镶木地板文件

将空值传递给 Python 中的存储过程