C# – Listedeki veriyi bağımsız bir nesne olarak kopyalamak (Shallow Copy)

C# - Listedeki veriyi bağımsız bir nesne olarak kopyalamak (Shallow Copy)
Bazen Generic Listler ile uğraşırken verinin başka bir bellek dökümünde depolanması/taşınması gerekebiliyor. Bu tip ihtiyaçlarda nesnenin bir kopyasının çıkartılması şart. Aşağıdaki yöntem sayesinde nesnenin pratik bir şekilde kopyası çıkartılabilir.

public static class GenericCopier<T>
{
    public static T DeepCopy(object objectToCopy)
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(memoryStream, objectToCopy);
            memoryStream.Seek(0, SeekOrigin.Begin);
            return (T) binaryFormatter.Deserialize(memoryStream);
        }
    }
}

Aşağıda kullanımını bulabilirsiniz. Eğer kendi sınıfınızı kopyalamak istiyorsanız “Serializable” attribute sınıfınıza eklemeniz gerekebilir.

static void Main(string[] args)
{
    List<int> originalList = new List<int>(5);
    Random random = new Random();
    for(int i = 0; i < 5; i++)
    {
        originalList.Add(random.Next(1, 100));
        Console.WriteLine("List[{0}] = {1}", i, originalList[i]);
    }
    List<int> deepCopiedList = GenericCopier<List<int>>.DeepCopy(originalList);
    for (int i = 0; i < 5; i++)
        Console.WriteLine("deepCopiedList[{0}] value is {1}", i, deepCopiedList[i]);
}

kaynak