Нужно сделать окно входа в систему с именем пользователя и паролем в C#, но когда я ввожу неправильное имя пользователя или пароль, я получаю ошибку - PullRequest
0 голосов
/ 22 марта 2020

когда я ввожу неправильное имя пользователя или пароль, я получаю эту ошибку: Произошло необработанное исключение типа 'System.ArgumentOutOfRangeException' в mscorlib.dll

private void button1_Click(object sender, EventArgs e)
{
        string inserteduser = textBox1.Text;
        string insertedpassword = textBox2.Text;
        List<User> user = new List<User>();
        user.Add(new User { username = "Michael", password = "1990" });
        user.Add(new User { username = "Diana", password = "1234" });
        int userlenght = user.Capacity/2;

        for (int i = 0; i <= userlenght; i++)
        {
            if (user[i].username == inserteduser && user[i].password == insertedpassword)
                MessageBox.Show("Login succesfull");
            if  (i == userlenght)
                MessageBox.Show("Username or password is incorrect");**It never get's here**
        }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Как я уже говорил в моих комментариях: не используйте i <= userlenght, вместо этого используйте i <user.Count в вашем для l oop. Емкость отличается от длины или числа. Коллекция List - это коллекция с нулевым индексом. Первая запись имеет индекс «0». В списке есть две записи, поэтому последний индекс - List.Count - 1. </p>

Но чтобы сделать все это менее многословным и простым для понимания, вы можете просто использовать LINQ и сделать это:

var success = user.Any(x => x.username == inserteduser && x. password == insertedpassword);

var message = success ? "Login succesfull" : "Username or password is incorrect";
MessageBox.Show(message);
0 голосов
/ 22 марта 2020

Несколько вещей, которые вы могли бы делать по-разному:

  • Переместите список на уровень класса, чтобы он заполнялся только один раз.
  • Используйте user.Count и <(меньше чем ) в вашем l oop. </li>
  • Объявите bool для определения успешности входа в систему.

Все вместе, это может выглядеть как:

private List<User> user = new List<User>();

private void Form1_Load(object sender, EventArgs e)
{
    user.Add(new User { username = "Michael", password = "1990" });
    user.Add(new User { username = "Diana", password = "1234" });
}

private void button1_Click(object sender, EventArgs e)
{
    string inserteduser = textBox1.Text;
    string insertedpassword = textBox2.Text;

    bool success = false;
    for (int i = 0; i <user.Count; i++)
    {
        if (user[i].username == inserteduser && user[i].password == insertedpassword)
        {
            success = true;
            break;
        }                                    
    }
    if (success)
    {
        label1.Text = "Passed!";
    }
    else
    {
        label1.Text = "Username or password is incorrect";
    }            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...