将对象添加到同一对象的列表中

时间:2014-08-15 16:29:19

标签: c# asp.net-mvc

我得到了这个课程:

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>();
        }

谢谢!

1 个答案:

答案 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为空。