我有一个名为Permissions
的类,它有一些子类(和一些属性),Group
和Group.Permission
。
现在,我 CAN 执行以下操作
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;
但是, CAN NOT 执行此操作:
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.Group
对象,添加了值,然后将其添加到u
对象的Groups
列表中。在我看来应该有用,但是我想我在课堂上没有连线?我的班级只是一个属性列表property_name { get; set; }
所以真的没什么异国情调。
尝试后者,我在NullReferenceException
u.Groups.Add(groupItem);
答案 0 :(得分:4)
您可能需要在Permissions.Groups
构造函数中初始化Permissions
:
public class Permissions
{
public Permissions()
{
Groups = new List<Group>();
}
public ICollection<Group> Groups { get; set; }
}
答案 1 :(得分:1)
在第二个示例中,我的资金是您未在Permissions对象中初始化Groups集合。因此,实际上,您正在尝试将组项添加到空组集合中。
答案 2 :(得分:1)
因为您还没有实例化User.Groups
,它仍然是null。在User
的构造函数中或在实例化User
之后,您还必须实例化Groups
属性/字段。
public class Permissions
{
public List<Premissions.Group> Groups { get; set; }
...
public Permissions()
{
Groups = new List<Permissions.Group>();
}
}
OR
Permissions user = new Permissions();
user.Groups = new List<Permissions.Group>();
OR
public class Permissions
{
private List<Permissions.Group> _groups = new List<Permissions.Group>();
public List<Permissions.Group> Groups { get { return _groups; } set { _groups = value; } }
}
答案 3 :(得分:1)
您需要在权限构造函数中初始化组。
或者,如果您不想修改构造函数,可以使用object initializer。
示例:
更改 权限u =新权限();
到
Permissions u = new Permissions(){Groups = new List<Permissions.Group>()};
在对象初始值设定项中,将组初始化为空列表。