using System.Collections.Generic;
public static void Main()
myclass2 tmpMyClass2_1=new myclass2();
tmpMyClass2_1.str1="2-1-1";
myclass2 tmpMyClass2_2=new myclass2();
tmpMyClass2_2.str1="2-2-1";
List<myclass2> tmpMyClass2List=new List<myclass2>();
tmpMyClass2List.Add(tmpMyClass2_1);
tmpMyClass2List.Add(tmpMyClass2_2);
myclass1 myobj1=new myclass1();
myclass1 myobj2=new myclass1();
myobj1.list=new List<myclass2>(tmpMyClass2List.Clone());
myobj2.list=new List<myclass2>(tmpMyClass2List.Clone());
myobj1.list[0].str2="123";
myobj2.list[0].str2="456";
Console.WriteLine(myobj1.list[0].str2);
Console.WriteLine(myobj2.list[0].str2);
public static class extclass
public static IList<T> Clone<T>(this IList<T> listToClone) where T:ICloneable
return listToClone.Select(item => (T)item.Clone()).ToList();
public List<myclass2> list {get;set;}
this.list=new List<myclass2>();
public class myclass2:System.ICloneable
public string str1 {get;set;}
public string str2 {get;set;}
return this.MemberwiseClone();