You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中如何获取foreach循环的索引?用于数据库表更新

解决方案

要在遍历giveBackBuffets时获取循环索引,从而匹配OldSelectedProductsCount数组的对应元素,你可以替换掉List.ForEach方法(该方法的委托不支持索引参数),改用以下几种方式实现:

方法1:普通for循环

这是最直接的方式,通过索引直接访问集合和数组元素:

byte[] OldSelectedProductsCount = ThisFactor.BuffetServices.Where(q => q.FactorID == ThisFactor.FactorID).Select(q => q.Count).ToArray();

// 先校验集合与数组长度一致,避免索引越界
if (giveBackBuffets.Count != OldSelectedProductsCount.Length)
{
    throw new InvalidOperationException("giveBackBuffets集合长度与OldSelectedProductsCount数组长度不匹配");
}

for (int i = 0; i < giveBackBuffets.Count; i++)
{
    var buffetItem = giveBackBuffets[i];
    _Buffet.Update(new BuffetViewModel()
    {
        BuffetID = buffetItem.BuffetID,
        Name = buffetItem.Name,
        Price = buffetItem.Price,
        Count = buffetItem.Count + OldSelectedProductsCount[i],
    });
}

方法2:LINQ Select带索引遍历(C# 7.0+)

利用Enumerable.Select的重载方法获取索引,结合元组语法简化代码:

byte[] OldSelectedProductsCount = ThisFactor.BuffetServices.Where(q => q.FactorID == ThisFactor.FactorID).Select(q => q.Count).ToArray();

foreach (var (buffetItem, index) in giveBackBuffets.Select((item, idx) => (item, idx)))
{
    // 同样建议先校验索引是否在数组范围内
    if (index >= OldSelectedProductsCount.Length)
    {
        throw new IndexOutOfRangeException("索引超出OldSelectedProductsCount数组范围");
    }
    
    _Buffet.Update(new BuffetViewModel()
    {
        BuffetID = buffetItem.BuffetID,
        Name = buffetItem.Name,
        Price = buffetItem.Price,
        Count = buffetItem.Count + OldSelectedProductsCount[index],
    });
}

方法3:用Zip方法配对集合与数组(更安全)

如果希望避免索引操作,可使用Enumerable.Zip将两个集合按顺序配对,自动匹配对应位置的元素:

byte[] OldSelectedProductsCount = ThisFactor.BuffetServices.Where(q => q.FactorID == ThisFactor.FactorID).Select(q => q.Count).ToArray();

// 按顺序配对两个集合的元素
var pairedItems = giveBackBuffets.Zip(OldSelectedProductsCount, (buffet, oldCount) => new { Buffet = buffet, OldCount = oldCount });

foreach (var pair in pairedItems)
{
    _Buffet.Update(new BuffetViewModel()
    {
        BuffetID = pair.Buffet.BuffetID,
        Name = pair.Buffet.Name,
        Price = pair.Buffet.Price,
        Count = pair.Buffet.Count + pair.OldCount,
    });
}

注意:Zip会以较短的集合长度为基准配对,若两个集合长度不一致,多余的元素会被忽略,需根据业务需求判断是否要处理这种场景。

内容的提问来源于stack exchange,提问作者hossein shahmohamadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:01:14