#c# #unity3d
#c# #unity3d
Вопрос:
Я пытаюсь автоматически назначить длину определенного массива другому массиву, чтобы пользователю не приходилось назначать его во второй раз. Длины массивов должны быть равны. Я получаю длину массива и копирую ее в целое число, но как мне ее назначить?
public Transform[] pos;
public KeyCode[] key;
void Update()
{
int howMany = pos.Length;
key.Length = howMany; //Does not work
}
Ответ №1:
Length
это свойство getter, и вы не можете установить значение. Вы можете изменить размер массива с помощью Array.Resize
метода.
public Transform[] pos = new Transform[5]; // You must initialize it
public KeyCode[] key;
void Update()
{
Array.Resize(ref key, pos.Length);
}
Комментарии:
1. Помогает ли это изменять размер массива без его очистки?
2. Идеальный. Это то, что я искал. Спасибо 🙂
3. @jay.mila Будьте осторожны —
Array.Resize()
на самом деле выделяет новый массив, копирует элементы исходного массива в новый массив, а затем изменяет ссылку на массив, чтобы ссылаться на новый массив. Любые другие ссылки на старый массив по-прежнему будут ссылаться на старый массив. Обычно вы бы использовали aList<T>
для такого рода вещей, чтобы все, ссылающееся на этот список, видело новый список.4. Так, например, вывод следующего кода равен «20, 10»:
var arr1 = new int[10]; var arr2 = arr1; Array.Resize(ref arr1, 20); Console.WriteLine(arr1.Length ", " arr2.Length);
Ответ №2:
Вы не инициализировали pos
массив, как вы хотите получить его длину!
Решение: инициализировать key
массив с howMany
помощью переменной
Используйте этот код:
public Transform[] pos = new Transform[5]; // You must initialize it
public KeyCode[] key;
void Update()
{
int howMany = pos.Length;
key = new KeyCode[howMany]; // Initialize it with a variable
}
Комментарии:
1. Я пробовал это, но получаю сообщение об ошибке
Property or indexer 'Array.Length' cannot be assigned to -- it is read only
2. @jay.mila Не
key.Length
ноkey = new KeyCode[howMany];