NullReferenceException用于列表对象的对象数组属性

时间:2013-10-02 03:49:47

标签: c# arrays list nullreferenceexception

我有一个列表,我声明如下:

List<Person> persons = new List<Person>();

在我的代码的另一部分中,我使用LINQ查询初始化并填充列表,并从xml文件中获取数据。在这里注意并不重要。唯一要知道的是列表已初始化并确认填充了数据。

我的代码的另一部分使用WCF服务来查找列表中的人并获取其关联数据。在下面的代码中,变量ret保存此数据。

ServiceClient client = new ServiceClient();
MyService.Person p = new MyService.Person();

for (int i = 0; i < persons.Count; i++)
{
    p.PersonID = persons[i].PersonID;
    p.FName = persons[i].FName;
    p.LName = persons[i].LName;

    var ret = client.GetFees(new MyService.Person[] { p });

    for (int j = 0; j < ret[0].Fees.Length; j++)
    {
        persons[i].Fees[j] = ret[0].Fees[j].Amount; 
    }
}
client.Close();

我想要做的是从ret变量中获取 Amount 数据,并将其全部分配到人员列表费用属性中。在上面的代码中,这发生在这一行:

persons[i].Fees[j] = ret[0].Fees[j].Amount;

问题是我在Visual Studio上不断收到此错误:

  • NullReferenceException未处理

我认为它与未被初始化的人员列表对象的费用数组属性有关,或类似的东西。

如果案例是我有一个具有list属性的Person类的person对象,我会像这样初始化它:

Person p = new Person();
p.Fees = new List<double>(); 

但事实并非如此。那么在这种情况下我该怎么办?换句话说,如何修复persons[i].Fees[j] = ret[0].Fees[j].Amount;不抛出空引用异常??

我的最终目标是将费用数据存入人员列表的费用属性中,以便稍后我可以使用OrderBy方法对列表进行排序。但是现在我只需要摆脱这个错误。

提前感谢您的阅读。请帮忙。

1 个答案:

答案 0 :(得分:1)

你的for循环中的

执行此操作

for (int j = 0; j < ret[0].Fees.Length; j++)
{
    if(persons[i].Fees == null)
      persons[i].Fees = new List<double>();
    persons[i].Fees[j] = ret[0].Fees[j].Amount; 
}