不理解为什么必须实例化类

本文关键字:实例化 为什么 不理解 | 更新日期: 2023-09-27 18:10:55

我有一个实体:

public virtual int RecommendedUserId { get; set; }
public virtual string Firstname { get; set; }
public virtual string Surname { get; set; }
public virtual string Email { get; set; }
public virtual string JobTitle { get; set; }
public virtual DateTime? DateAndTimeProcessed { get; set; }
public virtual DateTime? DateAndTimeRecommended { get; set; }
public virtual string ReasonForRejection { get; set; }
//  User also an entity and has property UserId
public virtual User RecommendedByUser { get; set; }
public virtual User AssignedToUser { get; set; }

在我的控制器中我有:

   Entities.RecommendedUser user = new RecommendedUser();
   user.Firstname = model.Firstname;
   user.Surname = model.Surname;
   user.Email = model.Email;
   user.JobTitle = model.JobTitle;
   // why am i getting the Object reference not set to 
   // an instance of an object error??
   user.RecommendedByUser.UserId = CurrentUser.UserId;  

如果我实例化RecommendedUser,我不实例化UserRecommendedUser以及??

不理解为什么必须实例化类

您没有实例化userRecommendedByUser;你只是在安装user .

   user.Firstname = model.Firstname;
   user.Surname = model.Surname;
   user.Email = model.Email;
   user.JobTitle = model.JobTitle;
   user.RecommendedByUser = new RecommendedUser(); // or whatever the exact type is, maybe just User
   user.RecommendedByUser.UserId = CurrentUser.UserId; 

值类型用类初始化。但是子对象可以是NULL,因为它们是引用类型。这些对象在被赋值给属性之前需要初始化。

我假设你正在使用像实体框架这样的技术。像这样的框架允许你预取这些对象,这样当你从数据源获取实体时,它们就会被获取(并初始化)。但是,当创建新对象时,您需要自己创建它们。

在EntityFramework的情况下,有延迟加载特性。在您的特定情况下,这并不适用,因为您的对象没有被EF上下文跟踪。延迟加载(然后是自动实例化)只有在对象被跟踪时才会激活。

您应该首先检查空值如:

if(user.Firstname != null)
{
  user.Firstname = model.Firstname;
}

避免nullpointer异常

相关文章: