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