为什么我的代码接受了输入但仍然打印出错误?

Why does my code accept the input but still prints out the error?

一些背景:这是一个登录系统,它检查文本文件中的输入。我为此使用 list<> 和一个 foreach 循环。如果它与保存的行相匹配,那么它将是有效的。因此,如果不是,则打印出:一条无效消息。

此文本文档中有两行,程序按应有的方式读取了所有行,并且它是有效的等等。第一行没有打印出 "not valid message" 但第二行打印出来并且仍然可以接受.

string containDetails = firstName + " " + lastName + " " + password;
        List<string> lines = File.ReadAllLines (@"D:\LoginSystemFolder\UserDetailFolder\Users.txt").ToList ();
        foreach (var l in lines) {
            if (l.Equals (containDetails)) {
                Console.WriteLine("Login was a success!");
                ls.MainMenu ();
            }
            else if(!l.Equals(containDetails) {
                Console.WriteLine ("The login details are not valid. Are you sure they're correct?");

            }
        }

您应该在找到循环后退出循环,并且最好将下一步移到外面。此外,您的代码在最后一个 If 语句中缺少括号。请注意我在示例中如何使用实际字符串,以便更清楚预期的内容......这有助于人们更好地理解问题。调试您的代码会很容易地告诉您您的逻辑在哪里不起作用。

string containDetails = "Mark Morgan 123";
List<string> lines = new List<string>() {"Mark Morgan 123", "John Snow 456"};
bool successfulLogIn = false;
foreach (var l in lines) {
    if (l.Equals (containDetails)) {
        successfulLogIn = true;
        break; //exit loop
       // ls.MainMenu (); MOVING THIS OUTSIDE OF LOOP
    }
}

if(successfulLogIn){    
     Console.WriteLine("Login was a success!");
     // ls.MainMenu (); //call this here
}else{
    Console.WriteLine ("The login details are not valid. Are you sure they're correct?");
}