myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Aus Liste neue Liste erstellen (Clone) und nicht nur die Referenzen übernehmen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Aus Liste neue Liste erstellen (Clone) und nicht nur die Referenzen übernehmen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
GyrosMitVielScharf
myCSharp.de-Mitglied

Dabei seit: 08.08.2017
Beiträge: 14


GyrosMitVielScharf ist offline

Aus Liste neue Liste erstellen (Clone) und nicht nur die Referenzen übernehmen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Ich habe zu meinem Problem leider nichts im Internet gefunden.
Entweder benutze ich die falschen Suchbegriffe oder aber das Problem existert nur in meinem Kopf...

Ich füge einer (für mich im Code) permanenten Liste von Listen den Inhalt einer (für mich im Code) temporären Liste hinzu. ListA.Add(ListB).

Danach leere ich die temporäre Liste mittels ListB.Clear().
Und die Elemente in der anderen Liste sind auch weg.
Womit sie nicht permanent ist.

Wie kann ich dieser Liste Elemente zuweisen, die fest darin verbleiben, egal was ich anschließend mit der temporären Liste anstelle?

Ich möchte also keine Verweise haben, sondern eigenständige Objekte.

C#-Code:
print(l_CurrentChanges.generation.Count); // -> 5

      classGeneration newGen = new classGeneration();
      newGen = l_CurrentChanges;

      l_UndoList.Add( newGen );
      l_CurrentChanges.generation.Clear();

      print(l_UndoList[l_UndoList.Count-1].generation.Count); // -> 0

Wie kann ich dieses Problem lösen?


Vielen Dank in voraus für Ihre Hilfe.
22.12.2018 14:57 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.264
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Erklär doch mal, was Du eigentlich vor hast.
Riecht etwas danach, dass das Design und Vorgehen an für sich suboptimal ist...

Es ist immer sinnvoller die Ursache eines Problems zu lösen, statt die nur die Symptome.
PS: bitte beachte  [Hinweis] Wie poste ich richtig? und verwende Code Tags
22.12.2018 15:02 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.412
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann erzeuge eine neue Liste:

C#-Code:
var list = new List<X>(l_CurrentChanges); // für X passenden Datentyp einsetzen

// oder mittels LINQ
var list = l_CurrentChanges.ToList();

und füge diese der UndoList hinzu.

PS: Bitte benutze die Code-Tags (du kannst deinen Beitrag editieren).
22.12.2018 16:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GyrosMitVielScharf
myCSharp.de-Mitglied

Dabei seit: 08.08.2017
Beiträge: 14

Themenstarter Thema begonnen von GyrosMitVielScharf

GyrosMitVielScharf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sie haben recht, mein Vorgehen ist, euphemistisch formuliert, suboptimal...

Ich füge die Daten jetzt direkt in die jeweils instanziierte Zielliste ein.

Manchmal ist man im Denken völlig vernagelt.
Solange es nur zeitweilig auftritt und man darauf hingewiesen wird sollte es vertretbar sein.

Danke sehr für den Schubser in diese Richtung.


Kann man generell davon ausgehen, etwas beim Design missachtet oder missverstanden zu haben, wenn ein solcher Fall wie der meinige Auftritt?
MS arbeitet ja erst seit mehr als fünfzehn Jahren an C#, die haben bestimmt noch nicht alles relevante bedacht...

Ich bin langjähriger C++-Programmierer, vielleicht liegt es daran.


Vielen Dank für Ihre schnelle Hilfe.

Werde jetzt meinen Code ändern, besser noch, neu erstellen.
22.12.2018 16:47 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.264
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von GyrosMitVielScharf:
MS arbeitet ja erst seit mehr als fünfzehn Jahren an C#, die haben bestimmt noch nicht alles relevante bedacht...

Die Wahrscheinlichkeit, dass Dein Konzept suboptimal ist, ist wahrscheinlicher, als dass die Designer hinter C# "was vergessen" haben.
C# ist eine sehr sehr erwachsene Sprache, die durchaus auch Konzepte besitzt, die in zeitlich älteren Sprachen schmerzlich fehlen.
Das Alter einer Sprache hat nichts direkt mit ihrer Reifheit zutun.

Zitat von GyrosMitVielScharf:
Kann man generell davon ausgehen, etwas beim Design missachtet oder missverstanden zu haben, wenn ein solcher Fall wie der meinige Auftritt?

Es gibt durchaus Szenarien, bei denen Objekte zu kopieren sinnvoll sein kann; 99,9% der Wünsche Objekte zu kopieren sind aber Designfehler.
22.12.2018 18:20 Beiträge des Benutzers | zu Buddylist hinzufügen
GyrosMitVielScharf
myCSharp.de-Mitglied

Dabei seit: 08.08.2017
Beiträge: 14

Themenstarter Thema begonnen von GyrosMitVielScharf

GyrosMitVielScharf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Die Wahrscheinlichkeit, dass Dein Konzept suboptimal ist, ist wahrscheinlicher, als dass die Designer hinter C# "was vergessen" haben.

Ich wollte meine Aussage zusätzlich zu den drei . am Satzende als Ironie kennzeichnen, mein Fehler...

Ich schätze C# sehr.
Mir ging es bei der Erwähnung von C++ um dessen explizite Anwendung/Kennzeichnung von Referenzen - Pointern - als solche, was ich manchmal vermisse.
Andererseits kann ich auf das Pointer-Gewusel liebend gerne verzichten.
Das sollte kein C#-Bashing werden.
22.12.2018 18:59 Beiträge des Benutzers | zu Buddylist hinzufügen
GyrosMitVielScharf
myCSharp.de-Mitglied

Dabei seit: 08.08.2017
Beiträge: 14

Themenstarter Thema begonnen von GyrosMitVielScharf

GyrosMitVielScharf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Dann erzeuge eine neue Liste

Das tat ich ja mit dem hier beklagten Resultat.

Ich erzeuge die Liste nun direkt in der Ziel-Listen-Liste ohne Zwischenliste.

Ich denke, ich brauche mehr Listen.
22.12.2018 19:22 Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 446
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ein Listenfanatiker ;)

Also wenn du eine Liste mit Objekte hast und alle oder bestimmte Objekte in einer anderen Liste ebenfalls eintragen möchtest (selbige Objekt-Instanzen), dann muß die 2te Liste natürlich wie schon gesagt ebenfalls mit new initiieren und nicht einfach die vorhandene der neuen 2ten zugeweisen.

Somit müßtest du 2 versch. List-Instanzen besitzen.

Sollten jetzt trotzdem Einträge beim Clear der temporären aus der permanenten Liste verschwinden, so hast du sicher einen Bug drinnen.

Wenn du deinen Code preis gibts, kann man eher was erkennen...

Grüße
09.01.2019 14:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
GyrosMitVielScharf
myCSharp.de-Mitglied

Dabei seit: 08.08.2017
Beiträge: 14

Themenstarter Thema begonnen von GyrosMitVielScharf

GyrosMitVielScharf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guten Abend,

Vor dem Zubettgehen erstelle ich mir eine Liste, welche Listen ich am folgenden Tag erstellen muss...

Ich habe das beschriebene Problem in den Griff bekommen und gelöst.

Es war ein Verständnisfehler/eine Unlogik meinerseits, eine unnötige separate Liste zu führen nebst einem Abrutschen in Gewohnheiten aus seligen C++-Zeiten.

Ich bin - warum auch immer - fälschlicherweise davon ausgegangen, dass in C# eine Objektzuweisung ein Kopieren zufolge hat und keine Referenz auf das ursprüngliche Objekt.

Jetzt funktioniert alles wie gewünscht.

Danke für Ihre Antwort.
12.01.2019 21:59 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.12.2019 19:01