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データを取得し、それをすべて person リストの料金属性に割り当てることです。上記のコードでは、これは次の行で行われます。

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

問題は、その行で Visual Studio からこのエラーが発生し続けることです。

  • NullReferenceException は処理されませんでした

人物リストオブジェクトの Fees 配列属性が初期化されていないなどの関係があると思います。

リスト プロパティを持つクラス Person の person オブジェクトがある場合は、次のように初期化します。

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

しかし、ここではそうではありません。それで、この状況で私は何をしますか?persons[i].Fees[j] = ret[0].Fees[j].Amount;つまり、 null参照例外をスローしないように修正するにはどうすればよいですか??

最終的な目標は、個人リストの料金属性で料金データを取得して、後で 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 に答える