将对象添加到集合中

时间:2011-01-01 16:08:43

标签: c#

我的名单对象具有以下属性:

    [DataMember]
    public ObservableCollection<personDetail> personContact
    {
        get
        {
            return _personContact;
        }
        set
        {
            if (value != _personContact)
            {
                _personContact = value;
                NotifyPropertyChanged("personContact");
            }
        }
    }

personDetail包含:

    private string _name;
    private string _phone;
    private string _email;

以及get和set语句。

我正在尝试将personDetail添加到我的personContact属性...

我尝试了以下内容:

            roster myRoster;
            myRoster = roster.CreateNewRoster();

                personDetail myPerson;
                myPerson = personDetail.newPerson();

                myPerson.name = ph.tbNameValue.Text.ToString();
                myPerson.phone = ph.tbPhoneValue.Text.ToString();
                myPerson.email = "None Yet";

            myRoster.personContact.Add(myPerson);

以及:

myRoster.personContact.Add(new personDetail() {name = myPerson.name, phone = myPerson.email});

每当我尝试将myPerson添加到personContact时,我每次都会收到NullReferenceException ...

我可能正在做一些愚蠢的事情......你能确定我做错了什么吗?

谢谢,新年快乐!

4 个答案:

答案 0 :(得分:4)

这表示没有任何内容将personContact设置为空的ObservableCollection<personDetail>。我建议CreateNewRoster()在返回之前应该这样做。否则,自己动手:

myRoster.personContact = new ObservableCollection<personDetail>();

顺便说一句,您应该尝试遵循.NET命名约定,其中公共类型和属性使用PascalCase命名,导致类型名称为PersonDetailRoster,以及属性NamePhoneEmailPersonContact的名称。我还要将PersonContact重命名为听起来更容易理解的内容 - 可能只是Contacts

答案 1 :(得分:3)

您需要将Roster.personContact初始化为某个内容 - 例如空列表:

myRoster.personContact = new ObservableCollection<personDetail>();

答案 2 :(得分:1)

也许您从未向myRoster.personContact分配任何内容,因此它仍为null

我还建议你关注微软Naming Guidelines

答案 3 :(得分:1)

myRoster = roster.CreateNewRoster(); instanciate _personContact 否则,它似乎为null,然后在null对象上调用add。