Идея получает анонимный объект с элементом и случайным порядком, а затем переупорядочивает элементы этим порядком и возвращает значение:
var result = items.Select(x => new { value = x, order = rnd.Next() })
.OrderBy(x => x.order).Select(x => x.value).ToList()
Превратите это в спецификацию:
- это возражает потребности реализовать интерфейс для разрешения в набор Чего-то как ArrayList<ICloneable>()
Затем Вас можно уверить, что Вы всегда делаете глубокую копию - интерфейс должен иметь метод, который, как гарантируют, возвратит глубокую копию.
Я думаю, что это является лучшим, можно сделать.
Одна опция состоит в том, чтобы использовать сериализацию. Вот сообщение в блоге, объясняя это:
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
Я предполагаю, что это - ответ ovbious:
Сделайте необходимое для классов сохраненным в наборе, чтобы быть cloneable. Вы могли проверить, что во время вставки или во время поиска, независимо от того, что имеет больше смысла, и выдают исключение.
Или если объект не cloneable, просто возвратитесь к состоянию до сбоя к возврату ссылочной опцией.