Benutzer mit den meisten Antworten
Dictionary - Kopiekonstuktur - Zuweisungsoperator?

Frage
-
Hallo,
ich bin mir nicht sicher. Ich habe ein Objekt mit Dictionary und muss ein Kopie erstellen.
Nur über Zuweisung schlug fehl, vermutlich weil gleiche Referenz.
Wie sieht das mit Dictionary aus? Reicht einfach zuweisen.
Wie bekomme ich alle Keys und Values heraus? Ich kenne die Keys ja nicht.
Danke.
public class Product_Basis { public string BoardContent { set; get; } public int Result { set; get; } /// <summary> /// additional data for marking /// </summary> public Dictionary<string, string> MarkingAddData; public Product_Basis MakeACopy() { Product_Basis copy = new Product_Basis(); copy.Batch = this.Batch; copy.BoardContent = this.Batch; copy.MarkingAddData = this.MarkingAddData; return copy; }
Grüße Andreas- Bearbeitet Andreas Bauer2 Mittwoch, 16. März 2011 18:14 Format
Antworten
-
Hallo Andreas,
wie unter http://msdn.microsoft.com/de-de/library/xfhwa508.aspx zu entnehmen besitzt Dicitionary<T> zwei Eigenschaften um die Keys und auch die Values zu extrahieren.
- copy.Keys liefert alle Keys und
- copy.Values liefert alle Werte.
Solltest du die Zuordnung der Key-Values benötigen, so holst du dir einfach einen Iterator, der dir sämtliche Schlüßel-Werte Paar in einer KeyValue Struktur zurückliefert.
Aber was du bräuchtest dürfte wesentlich einfacher gehen. Die Dictionary-Klasse verfügt ja bereits über einen "Kopier-Konstruktor" (http://msdn.microsoft.com/de-de/library/et0ke8sz.aspx).
Viele Grüße
Holger M. Rößler- Als Antwort markiert Andreas Bauer2 Mittwoch, 16. März 2011 19:33
Alle Antworten
-
Hallo Andreas,
wie unter http://msdn.microsoft.com/de-de/library/xfhwa508.aspx zu entnehmen besitzt Dicitionary<T> zwei Eigenschaften um die Keys und auch die Values zu extrahieren.
- copy.Keys liefert alle Keys und
- copy.Values liefert alle Werte.
Solltest du die Zuordnung der Key-Values benötigen, so holst du dir einfach einen Iterator, der dir sämtliche Schlüßel-Werte Paar in einer KeyValue Struktur zurückliefert.
Aber was du bräuchtest dürfte wesentlich einfacher gehen. Die Dictionary-Klasse verfügt ja bereits über einen "Kopier-Konstruktor" (http://msdn.microsoft.com/de-de/library/et0ke8sz.aspx).
Viele Grüße
Holger M. Rößler- Als Antwort markiert Andreas Bauer2 Mittwoch, 16. März 2011 19:33
-
Hi,
implementiere für Kopien Deiner Objekte am Besten ICloneable.
http://msdn.microsoft.com/de-de/library/system.icloneable(v=VS.100).aspx
Kopien von dictíonaries kannst Du einfach erstellen:
http://msdn.microsoft.com/de-de/library/system.linq.enumerable.todictionary.aspx
http://msdn.microsoft.com/de-de/library/bb549277.aspx
public Form1() { InitializeComponent(); Product_Basis p = new Product_Basis(); Dictionary<string, string> d1 = new Dictionary<string, string>(); d1.Add("a", "1"); d1.Add("b", "11"); d1.Add("c", "111"); p.MarkingAddData = d1; Product_Basis cp = p.MakeACopy(); p = null; MessageBox.Show(cp.MarkingAddData["b"]); } } public class Product_Basis { public string BoardContent { set; get; } public int Result { set; get; } public Dictionary<string, string> MarkingAddData; public Product_Basis MakeACopy() { Product_Basis copy = new Product_Basis(); copy.MarkingAddData = this.MarkingAddData.ToDictionary(a => a.Key, a => a.Value); return copy; } }
Edit: Ah, ich sehe gerade, Holger hat eine noch einfachere Art aufgezeigt, also:
copy.MarkingAddData = new Dictionary<string, string>(this.MarkingAddData);
Ich mache das meist wie zuerst genannt, da ich mir das dictionary dann gleich zurechtsortiere.
Viele Grüße,
Thorsten
-
Edit: Ah, ich sehe gerade, Holger hat eine noch einfachere Art aufgezeigt, also:
copy.MarkingAddData = new Dictionary<string, string>(this.MarkingAddData);
Ich mache das meist wie zuerst genannt, da ich mir das dictionary dann gleich zurechtsortiere.
Hallo Holger, Thorsten,
vielen Dank!
Grüße Andreas