2012-05-23 19 views
1

我有一個類,名爲Permissions,它有幾個子類(和一些屬性),GroupGroup.Permission。現在「x.Groups = list」works but「x.Groups.Add(listItem)」引發空引用異常?

,我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對象,增加值,然後把它添加到的Groupsu對象的名單。在我看來,應該工作,但是我認爲我沒有在我的課堂上佈線?我的課只是一個屬性列表property_name { get; set; }所以真的沒什麼異乎尋常的。

嘗試後,我上線u.Groups.Add(groupItem);

+0

向我們展示'Permissions'類。 – birryree

+0

那麼,哪個表達式(*。*)**的* left *是** null?每次都是一樣的故事......過於本土化。 (此外,還有什麼本質「OOP」在這個問題上。) – 2012-05-23 16:57:41

+0

@pst:我覺得你的意思向左^^ – Falanwe

回答

4

你可能需要在你的Permissions構造函數初始化Permissions.Groups得到NullReferenceException

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

    public ICollection<Group> Groups { get; set; } 
} 
+0

邦上錢!謝謝,當我被允許時,我會標記爲已回答。 – RemarkLima

+0

只想補充,我已經澆過一噸的教程,我找不到這個片段的任何提及,所以再次感謝你。 – RemarkLima

1

在第二個例子,我的錢是這樣的事實:您沒有在Permissions對象中初始化Groups集合。所以,實質上,您正試圖將一個組項添加到一個空的Groups集合中。

1

因爲您還沒有實例化User.Groups,它仍然爲空。無論是在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; } } 
} 
1

您需要的權限構造函數初始化組。

或者,如果您不想修改構造函數,則可以使用object initializer

實施例:

變化 權限U =新權限();

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

在對象初始化,團體被初始化爲空列表。