不理解为什么必须实例化类
本文关键字:实例化 为什么 不理解 | 更新日期: 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
,我不实例化User
在RecommendedUser
以及??
您没有实例化user
的RecommendedByUser
;你只是在安装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异常