List 的扩展方法Where,T是引用类型时,怎么实现深复制

List<T> 的扩展方法Where,T是引用类型时,如何实现深复制
像是List<string>, List<int> T是值类型时,使用Where,Select等方法得到的新list里的元素,是深度复制,
但是对List<T> T是引用类型,使用上述方法时,得到的新List里的元素是对原List的元素的引用,这样修改原List就会影响到新List,
所以请问有没有一种方法能够实现 T是引用类型(比如自己定义的类)时的深度复制。

------解决方案--------------------
序列化。List<T> 的扩展方法Where,T是引用类型时,怎么实现深复制
------解决方案--------------------
var newlist = list.Select(x => new XXX { 属性1 = x.属性1, 属性2 = x.属性2, ... }).ToList();