Ответ 1
Массивы имеют фиксированный размер в С# (.NET).
Вам нужно будет скопировать содержимое в новое.
byte[] sourceArray = ...
byte[] truncArray = new byte[10];
Array.Copy(sourceArray , truncArray , truncArray.Length);
У меня есть массив byte [] одного размера, и я хотел бы усечь его в меньший массив?
Я просто хочу отрубить конец.
Массивы имеют фиксированный размер в С# (.NET).
Вам нужно будет скопировать содержимое в новое.
byte[] sourceArray = ...
byte[] truncArray = new byte[10];
Array.Copy(sourceArray , truncArray , truncArray.Length);
Вы можете использовать Array.Resize
, но все, что это действительно делает, это сделать усеченную копию исходного массива, а затем заменить исходный массив на новый.
private static void Truncate() {
byte[] longArray = new byte[] {1,2,3,4,5,6,7,8,9,10};
Array.Resize(ref longArray, 5);//longArray = {1,2,3,4,5}
//if you like linq
byte[] shortArray = longArray.Take(5).ToArray();
}
Кстати, метод Array.Resize требует гораздо больше времени для завершения. В моем простом случае мне просто нужно было изменить размер массива байтов (~ 8000 элементов до ~ 20 элементов):
Обычно я создаю метод расширения:
public static byte[] SubByteArray(this byte[] byteArray, int len)
{
byte[] tmp = new byte[len];
Array.Copy(byteArray, tmp, len);
return tmp;
}
Что можно вызывать в массиве байтов так легко:
buffer.SubByteArray(len)
Вы не можете обрезать массив в С#. Они фиксированы по длине.
Если вам нужна структура данных, которую вы можете усекать и действовать как массив, вы должны использовать List<T>
. Для этого вы можете использовать метод List<T>.RemoveRange
.