.net core 显示“不为空”

问题描述 投票:0回答:1

我的 .net 6 代码出现错误

myModel
    public virtual TblTestCategory TestCategory { get; set; } = null!;

TestCategoryModel
    public string? TestKit { get; set; }

但是当我调用控制器时出现错误

if (searchValue.ToLower() == "complete")
                    {
                        data = data.Where(
                               x => (x.ExpiredDatetime > DateTime.Now &&
                                    (
                                    x.TblParticipantAnswers.Count(answer => answer.Status == true) < 
                                    x.TestCategory.TestKit.Split(',').Length))
                                    );
                    }

err

这里是错误提示

CS8602:尊重可能为空的引用

CS0854:表达式树可能不包含以下调用或调用 使用可选参数

我必须做什么?

c# asp.net-core
1个回答
0
投票

您收到的错误“CS8602”表示取消引用可能为空的引用。当您尝试在代码中调用 .Split(',') 时,TestKit 可能为 null。使用之前需要检查 TestKit 是否不为 null。您可以使用空条件运算符 ? 来完成此操作。仅当接收者不为空时才安全地访问成员和元素。

Split
方法具有可选参数,并且您在表达式树中使用它时,会出现错误“CS0854”。表达式树不支持具有可选参数的方法。

您可以尝试以下代码来解决它:

if (searchValue.ToLower() == "complete")
{
    data = data.Where(
           x => (x.ExpiredDatetime > DateTime.Now &&
                (
                x.TblParticipantAnswers.Count(answer => answer.Status == true) < 
                (x.TestCategory.TestKit?.Split(new char[] { ',' }, StringSplitOptions.None).Length ?? 0)
                ))
                );
}
© www.soinside.com 2019 - 2024. All rights reserved.