gpt4 book ai didi

C# Foreach 不断向列表中添加相同的项目

转载 作者:太空狗 更新时间:2023-10-29 22:10:23 25 4
gpt4 key购买 nike

我的简单 foreach 有问题。我正在尝试从数据库中获取数据到我的列表中。

IList<DeliveredTaskModel> deliveredTaskModel = new List<DeliveredTaskModel>();
// lines of code

if (materialUsed.Count > 0)
{
foreach (var material in materialUsed)
{
var deliveryModel = new DeliveredTaskModel();
deliveryModel.Info = materialUsed[0].SubPartCode;
deliveryModel.Description = materialUsed[0].Description;
deliveryModel.Qty = materialUsed[0].Qty;
deliveredTaskModel.Add(deliveryModel);
}
}

当我在 foreach 上设置断点时。我可以看到它在 materialUsed 中有 4 个不同的项目。但是,当我为每个对象执行此操作时,它只是将相同项目的 4 倍添加到网格中。

我假设它一直在添加相同的项目,但为什么呢?有人可以解释一下吗?

最佳答案

您总是不断地通过索引零进行访问。更正选项:

  1. 如果您使用 foreach,请使用:

    foreach (var material in materialUsed)
    {
    var deliveryModel = new DeliveredTaskModel();
    deliveryModel.Info = material.SubPartCode;
    deliveryModel.Description = material.Description;
    deliveryModel.Qty = material.Qty;
    deliveredTaskModel.Add(deliveryModel);
    }
  2. 如果您使用索引器更改为 for-loop:

    for(int i = 0; i < materialUsed.Count, i++)
    {
    var deliveryModel = new DeliveredTaskModel();
    deliveryModel.Info = materialUsed[i].SubPartCode;
    deliveryModel.Description = materialUsed[i].Description;
    deliveryModel.Qty = materialUsed[i].Qty;
    deliveredTaskModel.Add(deliveryModel);
    }
  3. 那么用户属性初始化器会更好:

    foreach (var material in materialUsed)
    {
    deliveredTaskModel.Add(new DeliveredTaskModel
    {
    Info = material.SubPartCode,
    Description = material.Description,
    Qty = material.Qty
    });
    }
  4. 然后使用 linq,您可以通过 .Select

    实现它
    var deliveredTaskModel = materialUsed.Select(material => new DeliveredTaskModel
    {
    Info = material.SubPartCode,
    Description = material.Description,
    Qty = material.Qty
    }).ToList();

我建议你选择最后一个选项:)

最后一条评论 - 你的 if 语句 (materialUsed.Count > 0) 是多余的,因为如果集合为空,它就不会进入循环

关于C# Foreach 不断向列表中添加相同的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com