【问题标题】:Update foreach in foreach c#在 foreach c# 中更新 foreach
【发布时间】:2022-01-15 07:59:23
【问题描述】:

显示的代码 sn-p 会将第一个列表中的每个元素与第二个列表中的一个元素进行比较。但是当内部 foreach 完成时,上部 foreach 重新进入并且图像在两个列表中抛出相同的 guid。 我怎样才能让它不这样做?

   var listDetail = await _repo.GalleryDetail.GetAllAsync(a => a.GalleryId == request.Id);

        request.GalleryDetails.ToList().ForEach(a =>
        {
            if (a.File == null) 
            {
                foreach (var item in listDetail)
                {
                    a.Image = item.Image;
                }
            }
            else
            {
                foreach (var item in listDetail)
                {
                    if (item.Image != null && item.Image != "True")
                        item.Image = a.File.DeleteFtp(url: item.Image.Substring(7), 
          cdn).ToString();
                }

                a.Image = a.File.UploadFtp("GalleryDetail", cdn);
            }
        });

【问题讨论】:

  • 你有什么问题?
  • 第一个foreach 循环看起来很奇怪……在循环内部,变量a 永远不会改变。 Item 每次迭代都会发生变化......所以在循环结束后a.Image 不会简单地包含最后一个item?简单地抓取列表中的最后一项而不是分配a.Image 大量值然后将它们丢弃不是更容易吗?
  • 由于我们不知道您真正想要做什么,除了“以不同的方式编写代码”之外,您希望我们如何为您提供解决方案?不要告诉我们你不想让你的代码做什么,而是告诉我们你想让它做什么
  • “我想更新数据库中的图像字段而不更改它。” ... ? …你有一个foreach循环定义arequest.GalleryDetails.ToList().ForEach(a => ……在那个循环里面…如果a.Filenull,你想发生什么?如果a.file 不是null,你想发生什么?
  • 可能类似于if(item.Id == a.Id){ a.Image = item.Image; }

标签: c# list foreach


【解决方案1】:

这将为listDetail 中的每个项目覆盖a.Image,因此您将获得最后一个Image

foreach (var item in listDetail)
{
    a.Image = item.Image;
}

由于您有 Id 属性,我建议使用它进行同步:

foreach (var item in listDetail)
{
    if (item.Id == a.Id)
    {
        a.Image = item.Image;
        break;
    }
}

我添加了一个break;,这样您就可以在找到匹配项后立即跳出循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多