我认为需要在页面加载时填充以下是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,但我得到错误。
答案 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