0

我对 C# 很陌生,但我需要更改一个查看数组的小函数。在我正在处理的代码中,foreach 用于遍历项目数组并将它们作为列表项呈现在网页上。现在,我必须找到类似这样的各种代码块,并将它们更改为不循环遍历整个数组,而是选择特定项目并渲染它们。

如果我只想拉出数组中绝对最新的项目,我该怎么做?我需要更改的示例:#foreach($product in $Website.Products)需要更改为类似#firstitem($product in $Website.Products)

这是上下文的整个块:

    <div class="slider-content">
        #if($Website.Products.Count != 0)
        <ul class="slider-list">
            #foreach($product in $Website.Products)
            <li class="slider-page">
                <div class="vdd-container">
                    <div class="vdd">
                        <blockquote>
                            <span class="quote-open"></span>
                            <q><span>${product.Message}</span></q>
                            <span class="quote-close"></span>
                        </blockquote>
                    </div>
                </div>
                <cite>
                    <strong class="pnx">${product.Name}</strong>
                </cite>
            </li>
            #end
        </ul>
        #else
        <div class="not-found">No products in store.</div>
        #end
    </div>

同样,只需要输出第一项,而不是循环执行每一项。

谢谢。

4

2 回答 2

2

看看 LINQFirst()和/或FirstOrDefault()扩展方法。它们允许您获得任何IEnumerable<T>. 您还可以指定必须满足的条件

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.first.aspx

//Gets the first product in the Products collection
var firstProduct = Website.Products.First();

//Gets the first product where a given condition is true
var firstExpensiveProduct = Website.Products.First(p => p.Cost > 100);
于 2012-12-13T02:25:32.203 回答
1

您应该能够通过多种方式做到这一点。

  1. 您可以使用数组访问器:$Website.Products[0]
  2. 您可以使用 LINQ:$Website.Products.First()

使用简单数组时,第一个选项更有效。后一个选项在某些情况下可能看起来更好,并且如果您使用某些类型的集合(而不是简单的数组),可能会表现得更好。


您的模板语法暗示您正在使用 nVelocity 模板引擎。如其他 SO questions中所述,nVelocity 似乎无法处理扩展方法。由于First()是扩展方法,这意味着您不能使用它。

数组访问器应该可以工作。

于 2012-12-13T02:23:41.563 回答