天天看点

Net X Nullable object must have a value.

最近发一件愁人的事“Net 6 Nullable object must have a value. ”。

通过百度搜索都没有找到问题的根本原因,

百度置顶的建议为

Net X Nullable object must have a value.

其实我们的目的很简单 将值类型转成引用类型 并可以赋值空值。

但是程序运行的时候如果 这个值类型是Null 对 NULL.Value 会报错 Nullable object must have a value

//性别
                if (aModel.sex.HasValue)
                {
                    if (!DictItem.XZ_Sex.Contains(aModel.sex.Value))
                    {
                        context.AddFailure(new ValidationFailure("sex", $"超出范围"));

                    }
                }
           

aModel.sex.Value 就会引发异常。

如何解决这个问题呢

第一种方法:三元表达式 aModel.sex==null?1:aModel.sex; 这种方式适合比较少的时候,如果我们大量使用了引用类型那么修改是痛苦不堪的事情,哪如何解决批量的问题呢,有的人说了“我批量替换不就行了吗?” 我也这么想过但是微软既然有这个错误编码就一定会有解决方案。

所以我去了官网找找问题的答案。

再这篇文章中我找到了答案。

任意门:点击下列连接

C# 编译器选项 - 语言功能规则 | Microsoft Learn

我直接贴出来吧

Net X Nullable object must have a value.

 这中问题一般出现在 升级的时候比如net.2.x net 3.x  net5.x 版本升级到net 6+ 以上的版本中。所以啊,在升级的过程中一定要主要这种问题。