Я создаю эту программу на 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());
Это приводит к ошибке необработанного исключения, если вы вводите большее значение, чем уже сохраненные члены.
Сначала вам нужно проверить, есть ли в списке элемент в нужной позиции:
if (list.ElementAtOrDefault(membChoice*3-3) != null)
{
Console.WriteLine("Username: " + membersList[membChoice*3-3]);
}
Это или вы можете сделать try
catch
, чтобы поймать ошибку и отобразить что-то вроде неверного выбора.
возможно, у вас есть опечатка при копировании в вашем первом (membChoice*3-3])
. Другой альтернативой может быть проверка свойства списка Count
Я не думаю, что ваш список эффективен. Насколько я понимаю, вы сохраняете три информации для одного и того же объекта в трех разных индексах.
Я думаю, что лучший способ понять, когда мы начинаем кодировать, — это создать класс для обработки всей этой информации, например класс 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);
Я настоятельно рекомендую вам изменить вызов на
Convert.ToInt32(Console.ReadLine())
, чтобы использоватьint.TryParse
; таким образом вы можете проверить, что пользователь ввел действительный номер, а не что-то вродеtwo
. Всегда предполагайте, что ваши пользователи могут все испортить