остановка цикла foreach после первой итерации в - PullRequest
0 голосов
/ 25 октября 2018

У меня есть функция, которая принимает список объектов (в моем случае, комментарии к записи в блоге) и пользователя.Затем функция должна выполнить итерацию по каждому комментарию в списке и установить логическое свойство IsCommenter в значение true или false в зависимости от того, равен ли идентификатор автора комментария идентификатору пользователя, который был передан. Концепция, представленная на рисунке ниже:

enter image description here

Если я вошел в систему как Taylor Swift и приведенный ниже список отправляется этой функции, а также Taylor Swift пользователю, тогда это логическое значениефункция должна вернуть false (потому что первый комментарий был сделан Happy Gilmore), true, true, 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 голосов
/ 25 октября 2018

Потому что у вас есть 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...