2016-04-05 3 views
0

リストであるオブジェクトプロパティを埋めるときに問題があります。私はあなたの問題をより良く示すことができるでしょう。複合プロパティを塗りつぶしているときにプロパティを上書きするリスト<Object>

Grupo grupo = null; 
SubGrupo subGrupo = null; 

if (Regex.IsMatch(linhaTrim, @"\b(?<!\.)([A-Z]{1,})(?!\.)\b")) 
{ 
    grupo = new Grupo(Convert.ToInt32(arraySplit[arraySplit.Length - 1]), grupoTextoTrim); 
    if (grupoTextoTrim.Equals("DISPONIBILIDADE DE DOCUMENTOS OFICIAIS")) 
    { 
     grupo.ler = false; 
     indice.Add(grupo); 
     break; 
    } 
    else 
    { 
     grupo.ler = true; 
    } 

    grupo.SubGrupos = new List<SubGrupo>(); 
    indice.Add(grupo); 
} 
else 
{ 
    //aqui será feita a verificação se existe ou não no indice um determinado subgrupo 
    //subGrupo = new SubGrupo(Convert.ToInt32(arraySplit[arraySplit.Length - 1]), grupoTexto.Trim()); 
    subGrupo = new SubGrupo(); 
    subGrupo = subGrupos.FirstOrDefault(x => x.descricao.Equals(grupoTextoTrim)); 
    subGrupo.pagina = Convert.ToInt32(arraySplit[arraySplit.Length - 1]); 
    grupo.SubGrupos.Insert(grupo.SubGrupos.Count, subGrupo); 
} 

問題は、このラインである:私のループで subGrupo.pagina = Convert.ToInt32(arraySplit[arraySplit.Length - 1]);

、descricaoの宿泊施設では、いくつかの同一の参照と、それらの同一基準の差がSubGrupoオ​​ブジェクトのプロパティページがあります。ループの後

、私は私のリストをチェックしたときに、私はこのようなものが必要です:

 
Grupo 
    descricao : x 
    SubGrupo : 
     descricao : y 
     pagina : y 
    End SubGrupo 
End Grupo 

Grupo 
    descricao : x 
    SubGrupo : 
     descricao : y 
     pagina : z 
    End SubGrupo 
End Grupo 

をしかし、今paginaに同じ値を返しています。

誰でも私を助けることができますか?

ありがとうございます!

+0

あなた 'subGrupo.pagina'は常に同じ値を返します。 ( 'arraySplit'の最後の値)を追加しない限り、他のコードでは追加されません。この配列の別の値を取得する必要がありますか? – levelonehuman

+0

Plsは私がCKのために作ったコメントを見ます。私はそれが私の問題を解決したと思う。 FirstOrDefaultを実行するときに、各反復でsubGrupo.paginaを追加して別のオブジェクトを取得します。あなたはそれについて心配している場合は、plsは私に教えてください? Tks! – ruynunes

答えて

0

ループロジックを共有すると役立ちます。 (整数の配列)が外ループを初期化します は、配列から要素を削除していない

  1. arraySplit場合は、 arraySplit[arraySplit.Length - 1]は常に同じ値を返します。しかし、ロジックに基づいて、あなたポストされた問題は、二つの場所で可能であると思われます。

    など。 int[] arraySplit = {1,2,3,4};

    arraySplit[arraySplit.Length - 1] = 4常にです。 grupoTextoTrim外ループを初期化するか、各反復で同じ値で初期化する場合は

  2. 、同じオブジェクトのコピーがリストに追加されます。 subGrupo = subGrupos.FirstOrDefault(x => x.descricao.Equals(grupoTextoTrim));

+0

CK、両方の変数はループ内部で初期化されていますが、問題が見つかりました。私がFirstOrDefaultを実行するとき、私はpaginaプロパティを設定していました。その後、同じ値を検索して、同じ値を返すことができることを知って、別の値で同じプロパティを書き換えていました。今私はそれを私のリストで同じオブジェクトを捕まえないように設定しています。しかし、あなたが私が言ったことについて他の懸念があれば、pls、私に知らせてください。 – ruynunes

関連する問題