首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在满足列表中的条件后使领班

在满足列表中的条件后使领班
EN

Stack Overflow用户
提问于 2018-09-12 09:01:28
回答 3查看 247关注 0票数 0

我正在创建一个静态标志页面使用列表保存数据。我使用一个ForEach循环遍历列表,但我面临的问题是,我希望我的for循环立即停止,条件为真。

注:我试过使用休息和回传,但他们没有像预期的那样工作。

守则如下:

代码语言:javascript
运行
复制
List<User> users = new List<User>(3);
    public MainWindow()
    {
        InitializeComponent();

        User superAdmin = new User()
        {
            userType = "Super Admin",
            uniqueCode = "123456",
            password = "password1"
        };
        User admin = new User()
        {
            userType = "Admin",
            uniqueCode = "654321",
            password = "password16"
        };
        User userOperator = new User()
        {
            userType = "Operator",
            uniqueCode = "109105",
            password = "specialpassword"
        };

        users.Add(superAdmin);  
        users.Add(admin);
        users.Add(userOperator);
    }



    private void login_OnClick(object sender, RoutedEventArgs e)
    {
        string userType = cmbAdminType.Text;
        string uniqueCode = txtUniqueCode.Text;
        string password = txtPassword.Text;

        foreach (User userPick in users)
        {        
            if (userPick.userType == userType && userPick.uniqueCode == uniqueCode)
            {
                MessageBox.Show("Cool you are in!");
                break;
            }
            else
            {
                MessageBox.Show("Err, not found!");
                break;
            }

        }

    }
}
    public class User
    {
        public string userType { get; set; }
        public string uniqueCode { get; set; }
        public string password { get; set; }
    }

拜托,我还能做什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-12 09:09:44

其他人已经指出了当前代码中的缺陷,但我建议在这里使用LINQ方法。它要短得多,而且易于阅读--至少当您习惯LINQ时:

代码语言:javascript
运行
复制
bool validUser = users.Any(user => user.userType == userType && user.uniqueCode == uniqueCode);
MessageBox.Show(validUser ? "Cool you are in!" : "Err, not found!");

Any是短路:一旦找到匹配,它就会停止.

顺便提一下,我强烈建议您开始遵循属性的.NET命名约定。

票数 4
EN

Stack Overflow用户

发布于 2018-09-12 09:06:03

我相信这可能是因为您的代码工作方式有一个逻辑错误。

目前,在第一次成功匹配或第一次不成功匹配时,您会中断foreach循环。因此,基本上,无论成功与否,您的枚举将在1次迭代后中断。

您可以引入一个标志,用于记录成功与否,然后在枚举之后进行测试,如下所示:

代码语言:javascript
运行
复制
private void login_OnClick(object sender, RoutedEventArgs e)
{
    string userType = cmbAdminType.Text;
    string uniqueCode = txtUniqueCode.Text;
    string password = txtPassword.Text;
    bool isMatched = false;

    foreach (User userPick in users)
    {        
        if (userPick.userType == userType && userPick.uniqueCode == uniqueCode)
        {
            isMatched = true;
            break;
        }
    }

    if (isMatched)
    {
        MessageBox.Show("Cool you are in!");
    }
    else
    {
        MessageBox.Show("Err, not found!");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2018-09-12 09:21:34

在列表中找到第一个对象之后,循环就停止了。我认为您想要完成的是,如果您正在寻找的对象未被找到,则当您查找的对象在循环的末尾找到时,它就会中断。守则:

代码语言:javascript
运行
复制
bool userInside = false;
foreach (User userPick in users)
    {        
        if (userPick.userType == userType && userPick.uniqueCode == uniqueCode)
        {
            MessageBox.Show("Cool you are in!");
            userInside=true;
            break;
        }                
    }
if (userInside==false)
    {
        MessageBox.Show("Err, not found!");
    }

我希望这能帮到你。^^

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52291334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档