创建列表时,对象未设置为对象错误的实例

时间:2013-05-15 21:12:10

标签: c# asp.net-mvc entity-framework

我认为需要在页面加载时填充以下是dal中的代码

      public List<KeyValuePair<Guid, string>> GetProjectName()
    {
        List<KeyValuePair<Guid, string>> List = null;
        try
        {
            using (LiveLeaseEntities db = LiveLeaseHelper.GetDbLiveLeaseEntities())
            {
                var projects = (from p in db.t_Project
                                where p.IsActive == true
                                select p).ToList();
                if (projects != null)
                {
                    foreach (t_Project p in projects)
                    {
                        List.Add(new KeyValuePair<Guid, string>(p.ProjectId, p.ProjectName));
                    }
                }

                return List;

我将对象设置为对象错误的实例。单步执行项目显示计数为7,但我得到错误。

3 个答案:

答案 0 :(得分:3)

您需要将List变量设置为null以外的其他内容,如下所示:

List<KeyValuePair<Guid, string>> List = new List<KeyValuePair<Guid, string>>();

否则,此行将触发异常:

 List.Add(new KeyValuePair<Guid, string>(p.ProjectId, p.ProjectName));
 // ^
 // |
 // +------ List variable is null

请注意,if (projects != null)条件是不必要的:ToList()可以返回一个空列表,但它永远不会返回null。此外,除非可以为空,否则不需要将== true与布尔变量一起使用。

最后,foreach循环可以使用LINQ的Select折叠,如下所示:

try {
    using (LiveLeaseEntities db = LiveLeaseHelper.GetDbLiveLeaseEntities()) {
        return db.t_Project
            .Where(p => p.IsActive)
            .Select(p => new KeyValuePair<Guid, string>(p.ProjectId, p.ProjectName))
            .ToList();
     }
} catch {
   ...
}

答案 1 :(得分:1)

您已声明变量List(顺便说一句,绝对使用其他名称

List<KeyValuePair<Guid, string>> List = null;

但从未初始化

List<KeyValuePair<Guid, string>> List = new List<KeyValuePair<Guid, string>>();

当然,当您尝试使用此变量时,您将获得NullReferenceException

List.Add(.....) <- NullReferenceException without the initialization

答案 2 :(得分:0)

您已将此行设置为null

List<KeyValuePair<Guid, string>> List = null;

然后尝试将项目添加到此中。所以你需要创建那个List类型的实例,所以做这样的事情

List<KeyValuePair<Guid, string>> list =  new List<KeyValuePair<Guid, string>>();

现在尝试将项目添加到此list