C# &引用;x、 组=列表“;工作,但;x、 组。添加(列表项)";抛出空引用异常?

C# &引用;x、 组=列表“;工作,但;x、 组。添加(列表项)";抛出空引用异常?,c#,asp.net,oop,C#,Asp.net,Oop,我有一个名为Permissions的类,它有几个子类(和一些属性),Group和Group.Permission 现在,我可以做以下事情 Permissions u = new Permissions(); u.userId = (Guid)user.ProviderUserKey; List<int> groups = getGroupsForUserId(u.userId.ToString()); List<Permissions.Group> groupItems

我有一个名为
Permissions
的类,它有几个子类(和一些属性),
Group
Group.Permission

现在,我可以做以下事情

Permissions u = new Permissions();
u.userId = (Guid)user.ProviderUserKey;
List<int> groups = getGroupsForUserId(u.userId.ToString());

List<Permissions.Group> groupItems = new List<Permissions.Group>();

foreach (int g in groups)
{
    Permissions.Group groupItem = new Permissions.Group();
    groupItem.group_id = g;
    groupItem.Records = getRecordsForGroupId(g);
    groupItem.Permissions = getPermissionsForGroupId(g);

    groupItems.Add(groupItem);
}
u.Groups = groupItems;
Permissions u=新权限();
u、 userId=(Guid)user.ProviderUserKey;
List groups=getGroupsForUserId(u.userId.ToString());
List groupItems=新列表();
foreach(分组中的int g)
{
Permissions.Group groupItem=新权限.Group();
groupItem.group_id=g;
groupItem.Records=getRecordsForGroupId(g);
groupItem.Permissions=getPermissionsForGroupId(g);
groupItems.Add(groupItem);
}
u、 组=组项目;
但是,我不能这样做:

Permissions u = new Permissions();
u.userId = (Guid)user.ProviderUserKey;
List<int> groups = getGroupsForUserId(u.userId.ToString());

foreach (int g in groups)
{
    Permissions.Group groupItem = new Permissions.Group();
    groupItem.group_id = g;
    groupItem.Records = getRecordsForGroupId(g);
    groupItem.Permissions = getPermissionsForGroupId(g);

    u.Groups.Add(groupItem);
}
Permissions u=新权限();
u、 userId=(Guid)user.ProviderUserKey;
List groups=getGroupsForUserId(u.userId.ToString());
foreach(分组中的int g)
{
Permissions.Group groupItem=新权限.Group();
groupItem.group_id=g;
groupItem.Records=getRecordsForGroupId(g);
groupItem.Permissions=getPermissionsForGroupId(g);
u、 Groups.Add(groupItem);
}
我的问题,为什么?

我创建了一个新的
Permissions.Group
对象,添加了值,然后将其添加到
u
对象的
组列表中。在我看来,这应该行得通,但我想我在班上还没有做点什么?我的类只是一个属性列表
property\u name{get;set;}
,所以没有什么特别的东西


尝试后一种方法,我在
u.Groups.Add(groupItem)行上得到一个
NullReferenceException

您可能需要初始化
权限。在
权限
构造函数中的组

public class Permissions
{
    public Permissions()
    {
         Groups = new List<Group>();
    }

    public ICollection<Group> Groups { get; set; }
}
公共类权限
{
公共权限()
{
组=新列表();
}
公共ICollection组{get;set;}
}

您可能需要初始化
权限。组
在您的
权限
构造函数中:

public class Permissions
{
    public Permissions()
    {
         Groups = new List<Group>();
    }

    public ICollection<Group> Groups { get; set; }
}
公共类权限
{
公共权限()
{
组=新列表();
}
公共ICollection组{get;set;}
}

在第二个示例中,我的钱在于您没有在Permissions对象中初始化Groups集合。因此,本质上,您是在尝试将组项添加到空的Groups集合。

在第二个示例中,我的重点是您没有在Permissions对象中初始化Groups集合。因此,本质上,您正在尝试将组项添加到空组集合。

因为您尚未实例化User.Groups
,所以它仍然为空。无论是在
User
的构造函数中,还是在实例化
User
之后,都必须实例化
属性/字段

public class Permissions
{
    public List<Premissions.Group> Groups { get; set; }
    ...
    public Permissions()
    {
        Groups = new List<Permissions.Group>();
    }
}
公共类权限
{
公共列表组{get;set;}
...
公共权限()
{
组=新列表();
}
}

Permissions user=new Permissions();
user.Groups=新列表();

公共类权限
{
私有列表_组=新列表();
公共列表组{get{return{U Groups;}set{U Groups=value;}}
}

因为您尚未实例化
User.Groups
,所以它仍然为空。无论是在
User
的构造函数中,还是在实例化
User
之后,都必须实例化
属性/字段

public class Permissions
{
    public List<Premissions.Group> Groups { get; set; }
    ...
    public Permissions()
    {
        Groups = new List<Permissions.Group>();
    }
}
公共类权限
{
公共列表组{get;set;}
...
公共权限()
{
组=新列表();
}
}

Permissions user=new Permissions();
user.Groups=新列表();

公共类权限
{
私有列表_组=新列表();
公共列表组{get{return{U Groups;}set{U Groups=value;}}
}

您需要在权限构造函数中初始化组

或者,如果不想修改构造函数,可以使用

例如:

改变 权限u=新权限()

Permissions u=new Permissions(){Groups=new List()};

在对象初始值设定项中,组被初始化为空列表。

您需要在权限构造函数中初始化组

或者,如果不想修改构造函数,可以使用

例如:

改变 权限u=新权限()

Permissions u=new Permissions(){Groups=new List()};

在对象初始值设定项中,组被初始化为空列表。

显示
权限
类。那么,哪个表达式(在
左侧)为空?每次都是一样的故事。。。太本地化了。(同样,在这个问题上没有本质上的“OOP”。@pst:我想你是指左派^^@Falanwe-Doh,是的,谢谢;-)@jrummell回答了我的问题@pst-很抱歉没有足够的OOP,虽然它只是基本类,对你来说我还在学习-Permissions.Group是一个
列表
,因此.Add是一个方法,事实上它是一个
列表
AFAIK。我可以看到
u
已启动/实例化,但无法找出
不可用的原因。向我们显示
权限
类。那么,哪个表达式(在
左侧)为空?每次都是一样的故事。。。太本地化了。(同样,在这个问题上没有本质上的“OOP”。@pst:我想你是指左派^^@Falanwe-Doh,是的,谢谢;-)@jrummell回答了我的问题@pst-很抱歉没有足够的OOP,虽然它只是基本类,对你来说我还在学习-Permissions.Group是一个
列表
,因此.Add是一个方法,事实上它是一个
列表
AFAIK。我看得出来<
Permissions u = new Permissions(){Groups = new List<Permissions.Group>()};