foreach循环在第一次迭代后停止

时间:2018-10-25 16:34:21

标签: c# asp.net asp.net-mvc

我有一个接受对象列表(在我的情况下,是博客文章中的评论)和用户的函数。然后,该函数应遍历列表中的每个注释,并将IsCommenter布尔值属性设置为true或false,具体取决于注释作者ID是否等于传入的用户的ID。概念如下图所示:

enter image description here

如果我以泰勒·斯威夫特(Taylor Swift)的身份登录,并且以下列表以及用户的泰勒·斯威夫特(Taylor Swift)发送给该函数,则此布尔函数应返回false(因为第一个评论由Happy Gilmore发表),为true ,正确,正确。

但是它不起作用。它正在做第一个注释,将其设置为true或false,然后退出foreach循环,将注释列表中第一个对象之后的所有内容都设置为false。

public bool IsCommenter(List<Comment> comments, ApplicationUser user)
{
    if (user == null) throw new ArgumentNullException("User can't be null");
    if (comments.Count() <= 0) throw new ArgumentException("Must have more than one comment.");

    foreach(var comment in comments)
    {
        if (comment.AuthorId == user.Id)
        {
            return comment.IsCommenter = true;

        } else 
        {
            return comment.IsCommenter = false;
        }
    }

    return false;
}

我怀疑这可能是由于函数中的最后return false所致,但是,我把它放在那儿是因为没有它,我会得到一个错误,即并非所有代码路径都返回一个值(我不会看看当它是if / else而不是if / elseif时可能会是这种情况。对此有任何想法吗?

1 个答案:

答案 0 :(得分:2)

因为循环中有return。删除

foreach(var comment in comments)
{
    if (comment.AuthorId == user.Id)
    {
        comment.IsCommenter = true;
    }
    else 
    {
        comment.IsCommenter = false;
    }
}

或简化

foreach(var comment in comments)
{
    comment.IsCommenter = comment.AuthorId == user.Id;
}