我得到了这个课程:
public class NotifyUser : ContentPage
{
public NotifyUser()
{
Friends = new List<FriendStatus>();
}
public string Namn { get; set; }
public List<FriendStatus> Friends { get; set; }
}
public class FriendStatus
{
public FriendStatus()
{
Name = "";
Checked = false;
}
public string Name { get; set; }
public bool Checked { get; set; }
}
我得到了这个方法,我尝试创建一个新对象并添加到列表中。
public void AddFriend(string namn)
{
namn = "Bob";
string user = User.Identity.GetUserName();
var loggedinuser = RavenSession
.Load<ContentPage>("NotifyUser/" + user) as NotifyUser;
var fr = new FriendStatus { Name = namn, Checked = false };
loggedinuser.Friends.Add(fr);
RavenSession.SaveChanges();
}
loggedinuser.Friends is a list of `frienstatus`,
当我尝试将新创建的对象添加到列表中时,我得到Additional information: Object reference not set to an instance of an object.
,有人可以看到我错过的内容吗?
我认为我的列表已在类中使用此行进行实例化
public NotifyUser()
{
Friends = new List<FriendStatus>();
}
谢谢!
答案 0 :(得分:3)
我强烈怀疑这一行是问题所在:
var loggedinuser = RavenSession.Load<ContentPage>("NotifyUser/" + user) as NotifyUser;
如果loggedinuser
方法实际返回的内容不是Load
,则 NotifyUser
将为null。这是使用强制转换比使用as
更好的地方 - 这意味着如果您的类型错误,您会立即获得有意义的异常,而不是NullReferenceException
稍后的。 (有关详细信息,请参阅embracing exceptions上的博文。)
我对RavenSession
一无所知,但如果你真的想要,我不会感到惊讶:
var loggedinuser = RavenSession.Load<NotifyUser>("NotifyUser/" + user);
如果您必须使用RavenSession.Load<ContentPage>
,则应更改代码以使用强制转换而不是as
。这样,如果loggedinuser
为null,那肯定意味着Load
返回null。
此外,您应该使用调试器来检查这类事情 - 这很容易让您区分loggedinuser
为空且loggedinuser.Friends
为空。