我对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>
同样,只需要输出第一项,而不是循环遍历并执行每个项目。
谢谢。
查看 LINQ First()
和/或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);
您应该能够通过多种方式执行此操作。
- 可以使用数组访问器:
$Website.Products[0]
-
您可以使用 LINQ:$Website.Products.First()
使用简单数组时,第一个选项更有效。 后一个选项在某些情况下可能看起来更好,如果使用某些类型的集合(而不是简单的数组),则性能可能会更好。
您的模板语法意味着您正在使用 nVelocity 模板引擎。 如其他SO问题所述,nVelocity似乎无法处理扩展方法。 由于First()
是一种扩展方法,这意味着您不能使用它。
数组访问器应该可以工作。