fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.Serialization;
  6. using System.Runtime.Serialization.Formatters.Binary;
  7.  
  8. namespace ConsoleApplication1
  9. {
  10. class Program
  11. {
  12. [Serializable]
  13. public class IdInfo
  14. {
  15. public int IdNumber { get; set; }
  16.  
  17. public IdInfo(int IdNumber)
  18. {
  19. this.IdNumber = IdNumber;
  20. }
  21. }
  22.  
  23. [Serializable]
  24. public class Product
  25. {
  26. public int Number { get; set; }
  27. public IdInfo IdInfo { get; set; }
  28. public string Name { get; set; }
  29.  
  30. public Product DeepCopy()
  31. {
  32. MemoryStream stream = new MemoryStream();
  33. IFormatter formatter = new BinaryFormatter();
  34.  
  35. formatter.Serialize(stream, this);
  36. stream.Seek(0, SeekOrigin.Begin);
  37.  
  38. var product = (Product)formatter.Deserialize(stream);
  39.  
  40. stream.Close();
  41. stream.Dispose();
  42.  
  43. return product;
  44.  
  45. }
  46. }
  47.  
  48. static void Main(string[] args)
  49. {
  50. List<Product> products = new List<Product>();
  51. products.Add(new Product { Number = 1, Name = "LADA SUPER SPORT PRO", IdInfo = new IdInfo(999) });
  52.  
  53. List<Product> currentProducts = products.Select(p => p.DeepCopy()).ToList();
  54.  
  55. currentProducts[0].Number = 22;
  56. currentProducts[0].Name = "BMW M5";
  57. currentProducts[0].IdInfo = new IdInfo(001);
  58.  
  59. Console.WriteLine(products[0].Number);
  60. Console.WriteLine(products[0].Name);
  61. Console.WriteLine(products[0].IdInfo.IdNumber);
  62. }
  63. }
  64. }
  65.  
Success #stdin #stdout 0.02s 31248KB
stdin
Standard input is empty
stdout
1
LADA SUPER SPORT PRO
999