dachte ich, dass eine Liste zu klonen würden Sie rufen Sie einfach an:Cloning Liste <T>
List<int> cloneList = new List<int>(originalList);
Aber ich habe versucht, dass in meinem Code und ich scheinen Effekte zu bekommen, dass die oben bedeuten einfach macht:
cloneList = originalList ... weil Änderungen an cloneList OriginalList zu beeinflussen scheinen.
Also, wie klont man eine Liste?
EDIT:
Ich denke so etwas wie dies zu tun:
public static List<T> Clone<T>(this List<T> originalList) where T : ICloneable
{
return originalList.ConvertAll(x => (T) x.Clone());
}
EDIT2:
Ich habe die tiefe Kopie Code vorgeschlagen von Binoj Antony und erstellt diese Erweiterung Methode:
public static T DeepCopy<T>(this T original) where T : class
{
using (MemoryStream memoryStream = new MemoryStream())
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, original);
memoryStream.Seek(0, SeekOrigin.Begin);
return (T)binaryFormatter.Deserialize(memoryStream);
}
}
EDIT3:
Nun sagen die Elemente in der Liste sind Strukturen. Was dann ergäbe, wenn ich ?:
List<StructType> cloneList = new List<StructType>(originalList);
Ich bin ziemlich sicher, dass genannt, als ich eine Liste mit neuen Unikaten gefüllt bekommen würde, richtig?
Auch die Bearbeitung - beachten Sie, dass ICloneable ist: schlecht unterstützt und b: schlecht angegeben (tief vs. seicht) - es ist nicht sehr im täglichen Gebrauch als Ergebnis gesehen. –
Re die Bearbeitung - originalList.ConvertAll (item => (T) item.Clone()) wäre effizienter - es kann die Größe korrekt einstellen, ohne die Liste neu zuordnen zu müssen. –
danke für beide Punkte, sie sind notiert –