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

Я создаю эту программу на 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 на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
Уроки CSS 6
Уроки CSS 6
Здравствуйте дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css. Сегодня мы снова продолжим с так называемых классов.
Что такое Css? Для чего он используется?
Что такое Css? Для чего он используется?
CSS, или "Каскадные таблицы стилей", - это язык стилей, используемый в веб-страницах. CSS является одним из основных инструментов веб-разработки...
0
1
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

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

Возможно, у вас есть опечатка при копировании в вашем первом (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);

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