1

我有一个名为 的类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 = 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);

4

4 回答 4

4

您可能需要Permissions.GroupsPermissions构造函数中进行初始化:

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

    public ICollection<Group> Groups { get; set; }
}
于 2012-05-23T16:56:46.333 回答
1

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

于 2012-05-23T16:57:00.923 回答
1

因为你还没有实例化User.Groups,它仍然是空的。在实例化的构造函数中User或之后,User您还必须实例化Groups属性/字段。

public class Permissions
{
    public List<Premissions.Group> Groups { get; set; }
    ...
    public Permissions()
    {
        Groups = new List<Permissions.Group>();
    }
}

或者

Permissions user = new Permissions();
user.Groups = new List<Permissions.Group>();

或者

public class Permissions
{
    private List<Permissions.Group> _groups = new List<Permissions.Group>();
    public List<Permissions.Group> Groups { get { return _groups; } set { _groups = value; } }
}
于 2012-05-23T17:01:00.767 回答
1

您需要在 Permissions 构造函数中初始化 Groups。

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

例子:

更改权限 u = new Permissions();

Permissions u = new Permissions(){Groups = new List<Permissions.Group>()};

在对象初始化器中,Groups 被初始化为一个空的 List。

于 2012-05-23T17:01:25.120 回答