Как и другие, уже заявленные, ваш код не имеет никакого смысла. Вы создаете массив комнат, оставляя все элементы неинициализированными (null
). Затем вы проверяете наличие комнаты внутри этого массива. Также в вашем цикле вы «добавляете» новую комнату каждый раз, когда элемент имеет другое имя. Я не знаю, как вы хотите добавить что-то в массив, который выходит за рамки вашего метода addRoom
. Надеюсь, это не ваш реальный код!
Таким образом, прежде всего массив комнат должен быть создан как поле вашего класса за пределами метода btnAddRm_Click
.
Поскольку вы хотите, чтобы добавить номеров, вы не должны использовать массив. Вместо этого используйте List<Room>
. В противном случае вам нужно будет узнать, сколько элементов вашего массива уже инициализировано комнатой. Также вам нужно будет увеличить массив, если число превышает начальный размер массива. Это именно то, что может сделать для вас List<Room>
.
Обработчик события btnAddRm_Click
может использовать LINQ для проверки наличия какой-либо комнаты с тем же именем. Обратите внимание, что вы должны использовать String.Compare(name1, name2)
вместо name1 == name2
.
private List<Room> _theRooms = new List<Room>();
private void btnAddRm_Click(object sender, EventArgs e)
{
if (!_theRooms.Any(r => string.Compare(r.Name, txtName.Text, StringComparison.CurrentCultureIgnoreCase) == 0))
{
addRoom();
}
}
Предполагая, что имя номер какой-то уникальный ключ для номеров вы можете также использовать HashSet<Room>
, а затем добавить в комнату в любом случае. HashSet
будет проверять наличие комнаты. Ваш класс Room
, однако, должен перезаписать Equals
и GetHashCode
, а затем с Equals
проверить на равенство имен комнат.
Что с этим не связано? – gdoron
Поскольку 'roomArray' привязан к данному методу, а' roomArray [i] .getRoomName() 'всегда будет вызывать исключение NullReferenceException - это ошибка, которую вы получаете? –
да! это ошибка, которую я продолжаю получать. У меня есть массив, объявленный на уровне класса, и до сих пор я получаю исключение NullReferenceException – user2101459