1

という名前のクラスPermissionsがあり、いくつかのサブクラス (およびいくつかのプロパティ)GroupGroup.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.Groupsます。Permissions

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

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

2 番目の例では、Permissions オブジェクトで Groups コレクションを初期化していないという事実に、私のお金があります。したがって、本質的には、グループ項目を null Groups コレクションに追加しようとしています。

于 2012-05-23T16:57:00.923 に答える
1

まだインスタンス化していないためUser.Groups、まだ null です。インスタンス化のコンストラクター内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 に答える