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,具体表达式是啥,从啥地方输入表达式,多谢
将 0 和 1 (float64) 转换为布尔值时将空值转换为 True [重复]