2016-10-06 2 views
0

У меня есть следующий цикл foreach, по общему признанию, не лучшее решение (с использованием модели в цикле), однако будет работать над лучшей практикой/эффективностью на более поздний срок, но просто хочет, чтобы она работала, ЕСЛИ это возможно.Как оператор всегда возвращается в пользовательский контроллер Umbraco?

Я могу подтвердить, что postAuthor получает модель и не является нулевым, сравнение двух значений int равно, хотя я не уверен, как выводить значения в консоль или что-то (C# noob).

Кажется, что я получаю все результаты, а не только те сообщения, которые имеют тот же идентификатор автора, что и выбранный автором.

Любые советы/помощь будут оценены.

 foreach (var post in posts) 
     { 
      var postAuthor = new AuthorModel(umbracoHelper.TypedContent(authorId), CultureInfo.CurrentCulture, umbracoHelper); 
      int postAuthorId = postAuthor.AuthorId; 

      if (postAuthorId != authorId) 
      { 
       posts.Remove(post); 
      } 
     } 
+0

Где определение AuthorID используются в если заявлении? –

+0

@LeonardoAlvesMachado находится за пределами цикла, поскольку переменная не изменится, но authorId равна текущей модели (int authorId = authorModel.AuthorId;) –

+0

Чтобы записать на консоль: 'Console.WriteLine (valueString);' - https: // www.dotnetperls.com/console –

ответ

2

У вас есть цикл for. В течение этого цикл, два утверждения

var postAuthor = new AuthorModel(umbracoHelper.TypedContent(authorId), CultureInfo.CurrentCulture, umbracoHelper); 
int postAuthorId = postAuthor.AuthorId; 

не должны быть размещены там: они не зависят от вашего вар поста, поэтому на каждой итерации, они будут иметь одинаковые значения.

Оператор if сравнивает значение postAuthorId (какое значение всегда такое же, как было сказано ранее) с authorId, которое не привязано ни к какому значению внутри цикла for.

То, что вы, вероятно, хотите сделать что-то вроде:

if (postAuthorId != post.authorId) {//do stuff} 

Я не понимаю, цель вашего кода: postAuthorId всегда будет равна AuthorID, так как вы определили первый используя второй.

Возможно, у вас «код ошибки».

Надеюсь, я помог.

1

Имейте в виду, что следующий код выглядит для объекта Umbraco с данным идентификатор узла:

umbracoHelper.TypedContent(authorId) 

Так ваша переменная authorId относится к идентификатору узла, и я полагаю postAuthorId относится к собственности на вашем AuthorModel , следовательно, разница в результатах.

Возможно, если вы изменили свой код к следующему, он должен работать

foreach (var post in posts) 
{ 
     // Assuming post is an IPublishedContent 
     var postAuthor = new AuthorModel(post, CultureInfo.CurrentCulture, umbracoHelper); 
     int postAuthorId = postAuthor.AuthorId; 

     if (postAuthorId != authorId) 
     { 
      posts.Remove(post); 
     } 
    } 
+1

Вы можете получить сообщение об ошибке, потому что вы меняете коллекцию, которую вы зацикливаете. Решите его, собирая сообщения, которые * соответствуют * в * другой * коллекции. –

Смежные вопросы