我有一个foreach循环,当从List中 Select 最后一项时,需要执行一些逻辑,例如:

 foreach (Item result in Model.Results)
 {
      //if current result is the last item in Model.Results
      //then do something in the code
 }

如果不使用FOR循环和计数器,我可以知道最后是哪个循环吗?

推荐答案

如果您只需要对最后一个元素执行某些操作(而不是对最后一个元素执行different),那么使用LINQ将有助于:

Item last = Model.Results.Last();
// do something with last

如果你需要对最后一个元素做一些不同的事情,那么你需要像:

Item last = Model.Results.Last();
foreach (Item result in Model.Results)
{
    // do something with each item
    if (result.Equals(last))
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}

不过,您可能需要编写一个自定义比较器,以确保能够判断该项与Last()返回的项相同.

这种方法应该谨慎使用,因为Last很可能需要遍历集合.虽然这对小集合来说可能不是问题,但如果它变大,可能会影响性能.如果列表中包含重复项,它也将失败.在这种情况下,这样的方式可能更合适:

int totalCount = result.Count();
for (int count = 0; count < totalCount; count++)
{
    Item result = Model.Results[count];

    // do something with each item
    if ((count + 1) == totalCount)
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}

Asp.net相关问答推荐

IISExpress未在ARM64 Mac/.NET 4.8上启动

Web 部署工具 2.1 和 Web 部署 3.5 有什么区别?从 VS 2010 部署需要哪一个?

RNGCryptoServiceProvider - 随机数审核

*不*使用 asp.net 会员提供程序是个坏主意吗?

jquery 1.9.0 和 modernizr 无法使用 ASP.NET Web 优化框架进行缩小

ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

如何判断 IIS 是处于 32 位还是 64 位模式

使用 JSON.NET 解析 json 字符串

从 IIS 7/8 中的静态内容中删除服务器标头

最佳服务器端 .NET PDF 编辑库

HttpContext.Current.Cache.Insert 和 HttpContext.Current.Cache.Add 有什么区别

如何解决 Kerberos 双跳问题?

每个 'HttpRequest' 在 ASP.NET 中都有自己的线程吗?

ASP.NET MVC4 异步控制器 - 为什么要使用?

如何从 NuGet 安装 EntityFramework 5.0(和其他旧版本)?

如何通过 Google 图表 API 使用 X 轴中的日期?

ASP.NET MVC NonAction 含义

将对象传递给 HTML 属性

IIS 是否执行非法字符替换?如果是这样,如何阻止它?

如何从 ASP.NET Identity 获取用户列表?