В моем коде C# у меня есть 2 класса, один называется «Имена», и, как вы можете видеть, он довольно прост, у него есть индексатор и массив, другой класс — это «Класс программы», который имеет метод Main
class Names
{
private static int _length;
private static string[] namesArray = new string[_length];
public string this[int i]
{
get => namesArray[i];
set => namesArray[i] = value;
}
public Names(int length)
{
_length = length;
}
}
class Program
{
static void Main()
{
Names names = new Names(10);
names[0] = "Jerry";
Console.WriteLine(names[0]);
Console.ReadKey();
}
}
когда я запускаю код.. он дает мне «IndexOutOfRangeException», поскольку массив имен пуст.. Я попытался жестко закодировать длину массива до 10 вместо передачи «_length» в массив.. и это сработало хорошо.. Я также пытался сделать переменную _length нестатической, но это дало мне ошибку, и она должна быть статической... Я попытался отладить его и узнать, где ошибка ... и я обнаружил, что переменная "_length" равна 10, поскольку я назначаю ее из конструктора ... но когда я передаю переменную в массив, массив все еще пуст. Мне нужно только указать длину массива из конструктора.
исследуйте значение и значение модификатора 'static'. Короче говоря, это означает, что информация в памяти статична, то есть информация останется там и не исчезнет. Однако у этой концепции есть немного понимания, и инициализация может быть сложной, поскольку она отличается от обычных нестатических элементов. Вы можете проверить это для начала. Обратите внимание, что статическая переменная должна быть инициализирована во время выполнения, а не как инициализация вашего массива :)
надеюсь, что это поможет поделиться кодом и попробовать его rextester.com/live/NRKW7686
Удалите инициализацию массива, потому что его переменная _length еще не установлена
Также удалите статическое ключевое слово, потому что оно здесь не используется.
private string[] namesArray;
private int _length;
Инициализация из конструктора
public Names(int length)
{
_length = length;
namesArray = new string[_length];
}
Совершенно очевидно, что это не имеет ничего общего с Unity, поскольку это консольное приложение. Кроме того, тег
[visual-studio]
неверен, потому что этот вопрос не касается приложения Visual Studio, а в информации тега указано, что вы не должны использовать его для кода, который был просто создан с помощью Visual Studio. Пожалуйста, добавляйте только соответствующие теги. В лучшем случае это вызовет раздражение у тех, кто следует тегам, которые используются не по назначению, в худшем случае сделает ваш вопрос запутанным, потому что вы даете нам неверную информацию о своем проекте.