Why is there not a built-in way to clone an object? Is it a philosophical thing? Having to manually implement ICloneable is obnoxious and it seems like its function is something that could be handled more robustly at a lower level. I'd love for 'object' to have a method akin to MemberwiseClone for deep copies.

So what IS the current best practice for cloning objects?
 