dd if=/dev/zero of=upload_test bs=file_size count=1
, Где file_size
размер Вашего тестового файла в байтах
Реализуйте метод клонирования в MyType, используя защищенный метод MemberwiseClone (выполняет поверхностное копирование) или используя технику глубокого клонирования. Вы можете заставить его реализовать ICloneable, а затем написать несколько методов расширений, которые будут клонировать соответствующую коллекцию.
interface ICloneable<T>
{
T Clone();
}
public static class Extensions
{
public static T[] Clone<T>(this T[] array) where T : ICloneable<T>
{
var newArray = new T[array.Length];
for (var i = 0; i < array.Length; i++)
newArray[i] = array[i].Clone();
return newArray;
}
public static IEnumerable<T> Clone<T>(this IEnumerable<T> items) where T : ICloneable<T>
{
foreach (var item in items)
yield return item.Clone();
}
}
Вы должны сделать это, потому что при создании нового массива при использовании Array.Copy он копирует ссылки, а не объекты, на которые ссылаются. Каждый тип отвечает за собственное копирование.
Если ваш тип сериализуемый, вы можете используйте методы сериализации, чтобы получить копию вашего массива (включая глубокие копии элементов):
private static object GetCopy(object input)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, input);
stream.Position = 0;
return formatter.Deserialize(stream);
}
}
Чтобы использовать его:
MyType[] items = new MyType[2];
// populate the items in the array
MyType[] copies = (MyType[])GetCopy(items);
Судя по первому сообщению, все, что ему нужно, это для "независимой копии массив ». Изменения самого массива shallowCopy
не будут отображаться в массиве types
(что означает назначение элемента, что он действительно показал выше, несмотря на то, что он сказал «глубокую копию»). Если это соответствует вашим потребностям, он будет иметь лучшую производительность.
MyType[] shallowCopy = (MyType[])types.Clone();
Он также упоминает «глубокую копию», которая будет отличаться для изменяемых типов, которые не являются рекурсивными агрегатами типов значений примитивов. Если MyType
реализует ICloneable
, это отлично подходит для глубокой копии:
MyType[] deepCopy = (MyType[])Array.ConvertAll(element => (MyType)element.Clone());