To deep copy a IList in C# and VB.NET you can use the snippet.
Sample C#
public static IList<T> Clone<T>(IList<T> listToClone) where T : ICloneable { return listToClone.Select(item => (T)item.Clone()).ToList(); }
Sample VB.NET
Public Shared Function Clone(Of T As ICloneable)(listToClone As IList(Of T)) As IList(Of T) Return listToClone.[Select](Function(item) DirectCast(item.Clone(), T)).ToList() End Function