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