【问题标题】:Why am I getting a null exception when trying to assign a value to a nested object in C# asp.net 5? [duplicate]为什么在 C# asp.net 5 中尝试为嵌套对象赋值时出现空异常? [复制]
【发布时间】:2021-08-19 00:49:16
【问题描述】:

我正在尝试为嵌套对象赋值,但我得到一个空异常。

System.NullReferenceException: Object reference not set to an instance of an object.

代码如下

addingTaskScheduleDto addToReturnTask = new addingTaskScheduleDto();


userTaskDto test = new userTaskDto();
test.UserId = task.UserTasks.FirstOrDefault().UserId;
test.TaskScheduleId = task.UserTasks.FirstOrDefault().TaskScheduleId;

// null exception happens on the code below
addToReturnTask.UserTasks.Add(test);

将TaskScheduleD添加到模型

public class addingTaskScheduleDto
{
    public int Id { get; set; }
    public string Title { get; set; }
    public DateTime? Start { get; set; }
    public DateTime? End { get; set; }

    public List<userTaskDto> UserTasks {get; set;}
}


public class userTaskDto
{
    public int UserId { get; set; }
    public int TaskScheduleId { get; set; }
}

【问题讨论】:

    标签: c# asp.net .net linq .net-5


    【解决方案1】:

    由于 UserTasks 为空,您会得到一个异常。您需要在某个时候使用空列表对其进行初始化。当你像这样实例化添加TaskScheduleDto时,你可以这样做

        public class addingTaskScheduleDto
        {
            public int Id { get; set; }
            public string Title { get; set; }
            public DateTime? Start { get; set; }
            public DateTime? End { get; set; }
        
            public List<userTaskDto> UserTasks {get; set;} = new List<userTaskDto>();
        }
    

    【讨论】:

    • FirstOrDefault() 也可以返回 null 并且您仍然会得到 null 异常...最好的解决方案是在访问属性之前检查 null
    • 我复制了上面的代码,但是仍然得到空异常错误。
    • 我刚刚运行它,它为我删除了异常。
    • @EGN 不会在test.UserId = task.UserTasks.FirstOrDefault().UserId; 上出现空异常而不是 OP 指示的行吗?
    • 现在为我工作。它不是 FirstOrDefault() 因为我可以看到一个值在那里,这是因为我不知道初始化嵌套对象。
    猜你喜欢
    • 2014-09-21
    • 2019-07-24
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多