0

我有需要在页面加载时填充的列表以下是 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,但出现错误。

4

3 回答 3

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 {
   ...
}
于 2013-05-15T21:14:23.630 回答
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
于 2013-05-15T21:15:20.100 回答
0

您已将您的列表设置为null这一行

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

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

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

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

于 2013-05-15T21:15:49.997 回答