不明白为什么我必须实例化这个类?

时间:2013-04-26 08:33:54

标签: c# reference

我有一个实体:

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吗?

4 个答案:

答案 0 :(得分:3)

您没有实例化RecommendedByUser的{​​{1}};您只是实例化user

user

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

在EntityFramework的情况下,有Lazy加载功能。在您的特定情况下不适用,因为EF上下文不跟踪您的对象。延迟加载(然后自动实例化)仅在跟踪对象时才有效。

This thread可能具有指导意义。

答案 3 :(得分:0)

您应该首先检查空值 像:

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

避免nullpointer异常