我在C#2.0中遇到了以下情况。
有一些VbScript代码:
For i = 0 to UBound(components) - 1
If i = UBound(Components) - 1 Then
WriteOut "<div class=""clearBoth""></div>"
End If
Next
下面我试图用C#编写,请建议为“如果i = UBound(组件) - 1然后”在c#中写入什么条件。
List<tc.ComponentPresentation> cmp = new List<tc.ComponentPresentation>();
foreach (tc.ComponentPresentation cm in cmp)
{
//Here I want to right one condition that
if(this is the last object in "cmp" list)
{
////do something
}
}
请建议!!
答案 0 :(得分:3)
if (cmp[cmp.Count - 1] == cm)
这应该有效。
答案 1 :(得分:2)
tc.ComponentPresentation lastItem = cmp[cmp.Count - 1];
答案 2 :(得分:0)
最简单的方法是使用索引器:
for (int i = 0; i < cmp.Count; i++)
{
var cm = cmp[i];
if (i == cmp.Count - 1)
{
// Handle the last value differently
}
}
另一种方法是使用来自"smart enumerations"的MiscUtil之类的内容,它允许您使用foreach
循环,但仍然可以访问“是第一个”,“是最后一个”,以及“索引“为每个条目。使用C#3,它实际上比博客文章中的代码更简单:
foreach (var entry in SmartEnumerable.Create(cmp))
{
var cm = entry.Value;
if (entry.IsLast)
{
...
}
}
(顺便说一下,tc
是一个奇怪的命名空间名称......)
编辑:请注意,检查当前项目是否等于列表中的最后一项是不可靠指示您当前正在进行最后一次迭代。它仅在列表包含不同元素时才有效。上面的两种方法都会告诉你是否在最后一次迭代中,这就是我想你想要的。
答案 3 :(得分:0)
试试这个:
cmp[cmp.Count - 1];
答案 4 :(得分:0)
将'foreach'循环更改为'for'循环,并使用循环索引器来复制cmp.Length
答案 5 :(得分:0)
为什么需要迭代通过列表?
如果您想使用最后一个元素,请使用
tc.ComponentPresentation cp = cmp[cmp.Count - 1];
//Do anything with cp here
就是这样