对于文章列表,当显示一篇文章时,我也会显示下一篇和上一篇文章,我使用下面的代码。我正在寻找一种使用Linq使代码更简洁的方法?

var article = allArticles.Where(x => x.UrlSlug == slug).FirstOrDefault();
int currentIndex = allArticles.IndexOf(article);

        if (currentIndex + 1 > allArticles.Count-1)
            article.Next = allArticles.ElementAt(0);
        else
            article.Next = allArticles.ElementAt(currentIndex + 1);

        if (currentIndex - 1 >= 0)
            article.Previous = allArticles.ElementAt(currentIndex - 1);
        else
            article.Previous = allArticles.Last();
return article;

最佳答案

我认为LINQ不提供“下一个或第一个”操作。最好使用模数:

article.Next = allArticles[(currentIndex + 1) % allArticles.Count];
article.Previous = allArticles[(currentIndex + allArticles.Count - 1) % allArticles.Count];


(第二行中的+ allArticles.Count用于将%应用于负数时纠正其数学上的错误行为。)

关于c# - 当列表索引超出范围时,Linq获取第一个或最后一个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32645671/

10-10 21:32