C#无法设置对象

时间:2016-06-25 16:10:50

标签: c#

所以我有一个包含用户列表的类组。每次我尝试将用户添加到列表时,编译器都会提醒我"对象引用未设置为对象的实例"。有人可以帮我告诉我这里出错的地方。感谢。

class User{
    public string UserName {
        get;set;
    }
    public User(){
    }

    public User(User u){
        UserName = u.UserName;
    }

}

class Group{
    public string GroupName {
        get;set;
    }

    public List<User> Users {
        get;set;
    }

    public Group(){

    }
}

class MainClass
{
    public static void Main (string[] args)
    {
        Group g = new Group ();
        g.GroupName = "First Group";
        g.Users.Add(new User(){ UserName = "Sam" });
    }
}

3 个答案:

答案 0 :(得分:3)

在向其中添加项目之前,您必须创建List<User> 实例,例如

   class Group{
     public string GroupName {
       get;set;
     }

     // I doubt if you want public "set" here: do you really want to assign a list?
     public List<User> Users {
       get;
       private set;
     }

     public Group() {
       // you have to create the list instance   
       Users = new List<User>();
     }
   }

答案 1 :(得分:1)

您可以通过创建新的Users并将其分配给构造函数中的属性来初始化List<User>属性。这样,您可以确保Group完成后列表一直存在。

class Group{
    public string GroupName {
        get;set;
    }

    public List<User> Users {
        get; private set;
    }

    public Group(){
        Users = new List<User>();
    }
}

Users属性设为只读(将set设为私有)也是一个好主意。您希望能够将用户添加到列表中,但您可能不希望有人能够做到这一点:

var group = new Group();
group.Users = null;

group.Users = new List<User>();

通过这种方式,您可以更好地控制其他类可以或不可以执行的操作。而且你会知道Users属性,列表本身永远不会为空。

答案 2 :(得分:0)

在这一行g.Users.Add(new User(){ UserName = "Sam" }); 你必须首先检查g.Users是否为空,如下所示:

if(g.Users==null)
   g.Users = new List<Users>();
g.Users.Add(new User(){ UserName = "Sam" });