0

我有一个清单,我声明如下:

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数据并将其全部分配给 people list fee 属性。在上面的代码中,这发生在这一行:

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

问题是我一直在该行从 Visual Studio 收到此错误:

  • NullReferenceException 未处理

我认为这与未初始化的人员列表对象的费用数组属性或类似的事情有关。

如果情况是我有一个具有列表属性的 Person 类的人对象,我会像这样初始化它:

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

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

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

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

4

1 回答 1

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; 
}
于 2013-10-02T04:13:54.060 回答