Назначить длину массива из длины другого другого массива

#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() на самом деле выделяет новый массив, копирует элементы исходного массива в новый массив, а затем изменяет ссылку на массив, чтобы ссылаться на новый массив. Любые другие ссылки на старый массив по-прежнему будут ссылаться на старый массив. Обычно вы бы использовали a List<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];