Как быть с несуществующей позицией в списке?

Я создаю эту программу на C#, в которой вы можете вводить данные о членстве, подтверждать их и просматривать ранее сохраненные членства. Я все еще очень новичок, и это всего лишь домашнее задание в школе.

Мой учитель предложил записывать и читать информацию о членстве в файл, но я понятия не имел, как это сделать эффективно, поэтому просто добавил их все в список. Я написал эту часть, чтобы получить имя пользователя, пароль и тип членства.

Однако как остановить «необработанную» ошибку, если пользователь вводит значение, в котором нет сохраненных данных?

Вот код: список называется memberList.

Console.WriteLine("Which stored membership would you like to view? (e.g 1, 2..)");
int membChoice = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Membership Entry " + membChoice);
Console.WriteLine("Username: " + membersList[membChoice*3-3]);
Console.WriteLine("Password: " + membersList[membChoice*3-2]);
Console.WriteLine("Membership Type: " + membersList[membChoice*3-1].ToUpper());

Это приводит к ошибке необработанного исключения, если вы вводите большее значение, чем уже сохраненные члены.

Я настоятельно рекомендую вам изменить вызов на Convert.ToInt32(Console.ReadLine()), чтобы использовать int.TryParse; таким образом вы можете проверить, что пользователь ввел действительный номер, а не что-то вроде two. Всегда предполагайте, что ваши пользователи могут все испортить

Flydog57 19.02.2023 22:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала вам нужно проверить, есть ли в списке элемент в нужной позиции:

if (list.ElementAtOrDefault(membChoice*3-3) != null)
{
   Console.WriteLine("Username: " + membersList[membChoice*3-3]);
}

Это или вы можете сделать trycatch, чтобы поймать ошибку и отобразить что-то вроде неверного выбора.

возможно, у вас есть опечатка при копировании в вашем первом (membChoice*3-3]). Другой альтернативой может быть проверка свойства списка Count

Cleptus 19.02.2023 23:17

Я не думаю, что ваш список эффективен. Насколько я понимаю, вы сохраняете три информации для одного и того же объекта в трех разных индексах.

Я думаю, что лучший способ понять, когда мы начинаем кодировать, — это создать класс для обработки всей этой информации, например класс Member:

class Member
{
   public int ID { get; set; }
   public string Name { get; set; }
   public string Password { get; set; }
   public string Type { get; set; }
}

И используйте этот класс ТОЛЬКО для ОДНОГО индекса вашего списка:

Member member = new Member() 
               {
                 ID = 1,
                 Name = "Monty Python",
                 Password = "My favorite color is blue",
                 Type = "Knight"
               };


List<Member> membersList = new List<Member>();
membersList.Add(member);

После того, как вы можете получить данные, выполнив поиск по идентификатору:

Member memberFind = membersList.Find(x => x.ID == membChoice);

И затем отображать данные:

Console.WriteLine("UserName : " + memberFind.Name);

Другие вопросы по теме