在数组中使用Person类

时间:2014-12-14 11:21:47

标签: c# arrays

您好我有以下问题:

我正在创建一个包含Person对象数组的程序。

aantalpersonen = int.Parse(tbArray.Text); // aantal te creëren items in array;

if (aantalpersonen > 5 || aantalpersonen <= 1)
    throw new ArgumentOutOfRangeException();
else
{
    Persoon[] personenLijst = new Persoon[aantalpersonen];
    foreach (Persoon persoon in personenLijst)
    {
         Persoon pers1 = new Persoon();
    }
}

在调试中看到这个给我=一个带有用户定义的人数的新数组, 一个具有人数的整数..在其他一些代码行中,我得到一个整数,它保存当前所选(编辑)的人。 所有这一切都很好,但是当我尝试将数据添加到每个人的属性时,我遇到了问题。

private void btnUpdateData_Click(object sender, RoutedEventArgs e)
{
    personenLijst[huidigpersoon - 1].Naam = tbNaam.Text;
    personenLijst[huidigpersoon - 1].Gewicht = int.Parse(tbGewicht.Text);
    personenLijst[huidigpersoon - 1].Lengte = int.Parse(tbLengte.Text);
    personenLijst[huidigpersoon - 1].Geboortedatum = dpGeboorte.SelectedDate.GetValueOrDefault(DateTime.Today);
}

这给了我以下错误:

  

System.NullReferenceException未处理     的HResult = -2147467261     Message =对象引用未设置为对象的实例。

我的第一个想法是我必须通过使用用户选择的人数来具体声明每个人。但我无法弄清楚我应该怎么做,即使我愿意,我怎样才能确保人类的每个实例都有不同的名称,例如persoon1,persoon2 ..

3 个答案:

答案 0 :(得分:4)

您已声明数组包含指定数量的Persoon对象,但您尚未将该数组的任何元素设置为实际的Persoon实例。
所以你不能使用那些不存在的东西

aantalpersonen = int.Parse(tbArray.Text); 

if (aantalpersonen > 5 || aantalpersonen <= 1)
    throw new ArgumentOutOfRangeException();
else
{
    Persoon[] personenLijst = new Persoon[aantalpersonen];
    for( int x = 0; x < personenLijst.Length ; x++)
    {
       personenLijst[x] = new Persoon();
    }
 }

之后,您的数组中充满了Persoon类的实例,您可以更改各个实例的属性。但是,正如Holterman先生在下面的评论中所指出的,数组在此代码片段中被声明为局部变量,因此在您尝试更改单个属性的事件处理程序中它不可用(不在范围内)。要解决此问题,应在全局级别声明数组。

 Persoon[] personenLijst = null;

并用

初始化
 personenLijst = new Persoon[aantalpersonen];

说,为什么你仍然使用数组而不是更多才多艺的List<Persoon>

答案 1 :(得分:2)

您的问题来自于您没有初始化阵列成员的事实。

你创造了一大堆&#34; Person&#34;但它们不会存储到您的阵列中。正如.NET所述,默认情况下会初始化一个数组,并将所有列设置为null

您的代码应为:

Persoon[] personenLijst = new Persoon[aantalpersonen];
int i = 0;    
   foreach (Persoon persoon in personenLijst)
     {
       personenLijst[i] = new Persoon();
       i++;
     }

答案 2 :(得分:0)

好的,这有效,感谢问题是我这样做了:Persoon [] personenLijst = new Persoon [aantalpersonen];在else循环之后,它在第一个在全局级别声明的i旁边创建了一个NEW数组

通过把它改为personenLijst = new Persoon [aantalpersonen];一切正常! 谢谢你的帮助! 欣赏它