2016-04-05 2 views
0

Ich habe Probleme beim Füllen meiner Objekteigenschaft, die eine Liste ist. Unten werde ich Ihnen das Problem besser zeigen können.Eigenschaft überschreiben, wenn ich meine komplexe Eigenschaft befülle Liste <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); 
} 

Das Problem ist in dieser Zeile: subGrupo.pagina = Convert.ToInt32(arraySplit[arraySplit.Length - 1]);

Bei meiner Schleife gibt es einige identischen Referenzen auf DESCRIÇÃO Eigenschaft und der Unterschied zwischen diesem identischen Bezug werden die Eigenschaftenseite bei SubGrupo Objekt.

Nach der Schleife, wenn ich meine Liste überprüfen sollte ich so etwas wie dieses:

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

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

Aber jetzt den gleichen Wert für pagina zurückkehrt.

Kann mir jemand helfen?

Vielen Dank im Voraus!

+0

Ihren 'subGrupo.pagina' immer den gleichen Wert zurück:

  • Wenn grupoTextoTrim außerhalb Schleife initialisieren, oder in jeder Iteration mit dem gleichen Wert initialisiert wird, wird Kopie gleichen Objekt zur Liste hinzugefügt werden (Der letzte Wert in 'arraySplit'), es sei denn, Sie fügen etwas anderem Code hinzu, der nicht gepostet wurde. Sollten Sie dafür einen anderen Wert im Array abrufen? – levelonehuman

  • +0

    Bitte schauen Sie sich den Kommentar an, den ich für CK gemacht habe. Ich denke, das hat mein Problem gelöst. Ich füge das subGrupo.pagina in jeder Iteration hinzu, um ein anderes Objekt zu erhalten, wenn ich den FirstOrDefault mache. Wenn Sie irgendwelche Bedenken haben, bitte sagen Sie mir ok? Tks! – ruynunes

    Antwort

    0

    Es wäre hilfreich, wenn Sie die implementierte Schleifenlogik verwenden. Aber auf Logik basiert Sie auf dem Laufenden Problem scheint an zwei Stellen möglich:

    1. Wenn arraySplit (Integer-Array), die außerhalb Schleife initialisiert und Sie sind keine Elemente aus dem Array entfernt, arraySplit[arraySplit.Length - 1] immer denselben Wert zurückgeben .

      z. int[] arraySplit = {1,2,3,4};

      arraySplit[arraySplit.Length - 1] = 4 immer. subGrupo = subGrupos.FirstOrDefault(x => x.descricao.Equals(grupoTextoTrim));

    +0

    CK, beide Variablen werden innerhalb der Schleife initialisiert, aber ich habe das Problem gefunden. Wenn ich den FirstOrDefault anwendete, stellte ich die pagina -Eigenschaft ein, und wenn ich dies später in der Zukunft erneut nach dem gleichen Wert suche, wusste ich, dass ich den gleichen Wert repetieren konnte, und schrieb dieselbe Eigenschaft mit einem anderen Wert neu. Jetzt setze ich es so, dass es nicht das selbe Objekt in meiner Liste fängt. Aber wenn Sie irgendwelche anderen Bedenken haben, was ich gesagt habe, bitte, lassen Sie es mich wissen. – ruynunes

    Verwandte Themen