Benutzer mit den meisten Antworten
Generic List<> Member ändern

Frage
-
Hallo liebe Community,
ich bin gerade am verzweifeln. Ich versuche die Member meiner generischen Liste zu durchlaufen und in diesem Zug zu verändern - in meinem Beispiel sind die Member ein struct. Da mit foreach dies nicht möglich war verschuchte ich es mit der List.Foreach(delegate) Methode. Es sah erst ganz gut aus, denn der Compiler brachte keine Fehler mehr. Nur leider scheint die Änderung nur intern(lokal) verfügbar und nach Durchlauf der ForEach Methode waren die Änderungen in der Liste nicht mehr zu sehen.
Kennt hier jemand eine Vorgehensweise - oder vielleicht eine andere Datenstruktur mit der ich arbeiten sollte?
vielen Dank schon im Vorraus
Gruß
Frank Vogler
Hier noch der geforderte Code:
public class test
{
public List<structure> myList = new List<structure>();
public struct structure
{
public int a;
public int b;
}
public void main()
{
populateList();
changeListMembers();
//Dies sollte 3 ergeben ergibt aber 1
//Lösung ist anstelle des structs eine Klasse zu verwenden dann tut es
MessageBox.Show(myList[0].a);
}
public void populateList()
{
structure st = new structure();
st.a = 1;
st.b = 2;
myList.Add(st);
}
public void changeListMembers()
{
myList.ForEach(doIt);
}
public void doIt(structure parameterStruct)
{
parameterStruct.a = 3;
parameterStruct.b = 4;
}
}
Antworten
-
Lösung:
Anstelle des structs eine Klasse verwenden (struct einfach in class umwandeln). Dann scheint
in der List.ForEach(delegate) Methode das Listenenelement per Referenz übergeben zu werden. Beim struct wird anscheinend nur eine lokale Kopie übergeben.
Warum dies so ist kann ich nicht verstehen aber ich nehme es mal so hin :-)
Gruß Frank
Alle Antworten
-
Könntest du uns ein bischen Code posten evtl. können wir dann schneller Antworten.
Es ist immer schwer sich etwas vorzustellen, wenn der Code fehlt sry.
Also ich wart dann mal auf den Code und schaus mir nochmal an.
Schau mal evtl. hier: http://www.tecchannel.de/webtechnik/entwicklung/437221/index3.html
oder: http://www.dotnetpro.de/newsgroups/newsgroupthread.aspx?id=6809
Liebe Grüße
-
Lösung:
Anstelle des structs eine Klasse verwenden (struct einfach in class umwandeln). Dann scheint
in der List.ForEach(delegate) Methode das Listenenelement per Referenz übergeben zu werden. Beim struct wird anscheinend nur eine lokale Kopie übergeben.
Warum dies so ist kann ich nicht verstehen aber ich nehme es mal so hin :-)
Gruß Frank