Ich möchte IEnumerable an eine Methode übergeben und eine Kopie von IEnumerable zurückgeben lassen. Ich möchte jedoch, dass jede in der Sammlung eine Kopie ist und nicht nur die Sammlung eine Kopie ist.Anonyme Typen klonen?
Ein Beispiel:
// some random data from L2S
var data = (from p in sourceData
select new
{
a = 1,
b = "hello",
}).ToArray();
var dataCopy = data.Copy(); // somehow i want 'dataCopy' to be a deep copy of 'data'
foreach (var d in dataCopy)
{
// alter the item in the collection somehow
d.b = d.b + "1";
}
// combine both sets of data
var finalData = data.Union(dataCopy);
So ist die Sammlung ‚Finaldata‘ hat doppelt so viele Punkte wie ‚Daten‘ oder ‚Datacopy‘. Also haben alle 'b' Parameter in 'dataCopy' eine "1" an das Ende angehängt, aber da sie immer noch auf die Objekte in 'Daten' verweisen, haben alle 'b' Parameter in 'Daten' ALSO '1' angehängt Ende.
Da dies anonyme Typen sind, kann ich das Objekt nicht einfach mit der BinaryFormatter-Methode "klonen", da der anonyme Typ nicht serialisierbar ist. Und ich kann kein neues von Grund auf mit Activator.CreateInstance erstellen, da der anonyme Typ keinen parameterlosen Konstruktor hat.
Ich weiß, dass ich umgehen könnte, indem ich zunächst meine Daten in eine als Serializable markierte Klasse auswähle, aber ich möchte wirklich nicht so viel Code ändern müssen, da jedes Mal, wenn ich die Datenbank abfrage, die Parameter sein werden anders ...
Kann jemand alternativ einen Ersatz für den anonymen Typ empfehlen? zB:
var data = (from p in sourceData
select new SomeSortOfAnonymousTypeReplacement(new
{
a = 1,
b = "hello",
})).ToArray();
welche würde dann eine klonbare Schnittstelle implementieren? Diese