Generic deep copy class in C#