Was ist hier falsch ?

19/02/2009 - 11:03 von Michael Andreas | Report spam
Hi,

nachfolgender Code sollte eigentlich folgende
Werte liefern:

EbeneA_0
EbeneB_0_100
EbeneB_0_101
EbeneB_0_102
EbeneB_0_103
EbeneB_0_104
EbeneA_1
EbeneB_1_100
EbeneB_1_101
EbeneB_1_102
EbeneB_1_103
EbeneB_1_104

liefert aber :

EbeneA_0
EbeneB_4_100
EbeneB_4_101
EbeneB_4_102
EbeneB_4_103
EbeneB_4_104
EbeneA_1
EbeneB_4_100
EbeneB_4_101
EbeneB_4_102
EbeneB_4_103
EbeneB_4_104


offensichtlich wird EbenenB immer wieder
überschrieben. Warum?


Code:

public static class Ebenen
{
public struct EbeneA
{
public int Nr;
public string Name;
public List<EbeneB> EbenenB;
}

public struct EbeneB
{
public int Nr;
public string Name;
}
}

public partial class Form1 : Form
{
private Ebenen.EbeneA MyEbeneA;
private Ebenen.EbeneB MyEbeneB;
private List<Ebenen.EbeneA> MyEbeneAList = new List<Ebenen.EbeneA>();
private List<Ebenen.EbeneB> MyEbeneBList = new List<Ebenen.EbeneB>();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// Eingabe:
MyEbeneAList.Clear();
for (int i = 0; i < 5; i++)
{
MyEbeneA = new Ebenen.EbeneA();
MyEbeneA.Name = "EbeneA_" + i.ToString();
MyEbeneA.Nr = i;
MyEbeneBList.Clear();
for (int j = 100; j < 105; j++)
{
MyEbeneB = new Ebenen.EbeneB();
MyEbeneB.Nr = j;
MyEbeneB.Name = "EbeneB_" + i.ToString() + "_" +
j.ToString();
MyEbeneBList.Add(MyEbeneB);
}
MyEbeneA.EbenenB = MyEbeneBList;
MyEbeneAList.Add(MyEbeneA);
}

// Ausgabe:
foreach (Ebenen.EbeneA ea in MyEbeneAList)
{
Console.WriteLine(ea.Name);

foreach (Ebenen.EbeneB eb in ea.EbenenB)
{
Console.WriteLine(" " + eb.Name);
}
}
}
}
 

Lesen sie die antworten

#1 André Pönisch
19/02/2009 - 11:30 | Warnen spam
Hallo Michael,

nachfolgender Code sollte eigentlich folgende
Werte liefern:

[Werte]

offensichtlich wird EbenenB immer wieder
überschrieben. Warum?



ganz einfach, du hast dir nur eine einzige Liste für EbeneB angelegt. Die
du eben immer wieder nur leerst und neu füllst. Und jede EbeneA verweißt
bei dir auf diese eine Liste.
Was du eigentlich willst ist das jede EbeneA ihre eigene Liste hat.

Versuch es mal so, wie unten folgt.

Grüße
André


public partial class Form1 : Form
{
private List<Ebenen.EbeneA> MyEbeneAList = new List<Ebenen.EbeneA>();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// Eingabe:
MyEbeneAList.Clear();
for (int i = 0; i < 5; i++)
{
Ebenen.EbeneA MyEbeneA = new Ebenen.EbeneA();
MyEbeneA.Name = "EbeneA_" + i.ToString();
MyEbeneA.Nr = i;
List<Ebenen.EbeneB> MyEbeneBList = new List<Ebenen.EbeneB>();
for (int j = 100; j < 105; j++)
{
Ebenen.EbeneB MyEbeneB = new Ebenen.EbeneB();
MyEbeneB.Nr = j;
MyEbeneB.Name = "EbeneB_" + i.ToString() +
"_" + j.ToString();
MyEbeneBList.Add(MyEbeneB);
}
MyEbeneA.EbenenB = MyEbeneBList;
MyEbeneAList.Add(MyEbeneA);
}

// Ausgabe:
foreach (Ebenen.EbeneA ea in MyEbeneAList)
{
Console.WriteLine(ea.Name);

foreach (Ebenen.EbeneB eb in ea.EbenenB)
{
Console.WriteLine(" " + eb.Name);
}
}
}
}

Ähnliche fragen