C # Copiar matriz por valor

Tengo una matriz mecanografiadaMyType[] types; Y quiero hacer una copia independiente de esta matriz. probé esto

MyType[] types2 = new MyType[types.Length] ;

types2 = types ;

pero esto crea una referencia a la primera. Entonces intenté

Array.Copy( types , types2 , types.Length ) ;

pero tengo el mismo problema: cambiar un valor en la primera matriz también cambia el valor en la copia.

¿Cómo puedo hacer una copia completamente independiente o profunda de un Array, IList o IEnumerable?