C# 从两个不同的列表中添加两个值

C# 从两个不同的列表中添加两个值,c#,C#,又是一个我的大脑完全崩溃的时刻 我试图从两个单独的列表中添加两个值集合。老实说,我认为我遇到了价值类型的问题,但欢迎澄清 public List<decimal> getTotalSellingPrice(int costSheetID) { List<decimal> totalSellingPrice = new List<decimal>(); decimal bothMarkupAndToms = 0; foreach (v

又是一个我的大脑完全崩溃的时刻

我试图从两个单独的列表中添加两个值集合。老实说,我认为我遇到了价值类型的问题,但欢迎澄清

public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();

    decimal bothMarkupAndToms = 0;
    foreach (var i in getMarkupPrice(costSheetID)) 
    {
      foreach (var m in getToms(costSheetID)) 
      {
          bothMarkupAndToms = i + m;                      
      }


      totalSellingPrice.Add(Math.Round(bothMarkupAndToms));   
    }

    return totalSellingPrice;
}
正如您所看到的,对于每个集合中的每个项,我希望添加到嵌套集合中的另一个值

因此,每次通过时,它都应该i+m,然后添加到最终列表中,为UI做好准备


任何帮助都将不胜感激

如果要将项目i+m放入列表,请尝试以下操作:

public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();
    foreach (var i in getMarkupPrice(costSheetID))
    {
      foreach (var m in getToms(costSheetID))
      {
          totalSellingPrice.Add(Math.Round(i + m));
      }
    }
    return totalSellingPrice;
}
public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();
    decimal bothMarkupAndToms = 0;
    foreach (var i in getMarkupPrice(costSheetID)) 
    {
      bothMarkupAndToms = i;
      foreach (var m in getToms(costSheetID)) 
      {
          bothMarkupAndToms += m;                      
      }
      totalSellingPrice.Add(Math.Round(bothMarkupAndToms));   
    }
    return totalSellingPrice;
}
如果你想为每个i和所有m算出一个项目,我尝试以下方法:

public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();
    foreach (var i in getMarkupPrice(costSheetID))
    {
      foreach (var m in getToms(costSheetID))
      {
          totalSellingPrice.Add(Math.Round(i + m));
      }
    }
    return totalSellingPrice;
}
public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();
    decimal bothMarkupAndToms = 0;
    foreach (var i in getMarkupPrice(costSheetID)) 
    {
      bothMarkupAndToms = i;
      foreach (var m in getToms(costSheetID)) 
      {
          bothMarkupAndToms += m;                      
      }
      totalSellingPrice.Add(Math.Round(bothMarkupAndToms));   
    }
    return totalSellingPrice;
}
我希望这能有所帮助

编辑:

我认为您应该尝试从这两个列表中添加相应的元素,例如markupprices中的第一个元素和toms中的第一个元素等等。基于这种情况,您需要类似以下内容:

public List<decimal> getTotalSellingPrice(int costSheetID) 
{
    List<decimal> totalSellingPrice = new List<decimal>();
    decimal bothMarkupAndToms = 0;
    List<decimal> markupPriceList = getMarkupPrice(costSheetID);
    List<decimal> tomsList = getToms(costSheetID);
    for(int i = 0 ; i < tomsList.size() ; i++)
    {
      totalSellingPrice.Add(Math.Round(markupPriceList[i] + tomsList[i]));   
    }
    return totalSellingPrice;
}

这将为您提供getTotalSellingPrice中每个值与getToms中相应值的总和。如果两个列表各有4个值,则结果列表中会有4个值。你所做的更像是排列。这是两个列表的适当添加

public List<decimal> getTotalSellingPrice(int costSheetID)
{
    List<decimal> totalSellingPrice = new List<decimal>();
    List<object> toms = getToms(costSheetID);
    int j = 0,
        tomsCount = toms.Count;
    foreach (var i in getMarkupPrice(costSheetID))
    {
        if(j >= tomsCount )
            break;
        totalSellingPrice.Add(Math.Round(i + Convert.ToDecimal(toms[j])));
        j++;
    }

    return totalSellingPrice;
}

对于getMarkupPrice中的每个值,上面的代码将根据用于跟踪toms中当前值的索引j从toms中添加相应的值,并将结果添加到totalSellingPrice列表中。foreach内的附加if块检查toms是否超出值。如果是,中断时间;语句只是退出该foreach循环的执行。

问题在于您的两个foreach循环。您使用代码创建i*m值,而不是将i与m匹配然后添加它们。对于每一个i,你得到4 m,因此4*4将给你16个值。

它做了什么?只加上最后一个汤姆?那你看到了什么?您需要描述问题,而不仅仅是给我们代码…不应该totalSellingPrice.AddMath.RoundbothMarkupAndToms;在第二个环路内吗?否则你只需要在第一个循环的每个增量中得到最后一个计算值。现在还不清楚你为什么要这样做。。。你能更详细地描述一下上下文吗?你的名字有点难懂,这也无济于事——汤姆是什么?请注意,除非发生任何奇怪的事情,否则对于外循环的每次迭代,所有TOM的总和都是相同的……你的两个markupandtoms=i+m;对于除getTomscostSheetID中的最后一个值之外的所有值都是毫无价值的。您需要markupandtoms+=m;?您好,谢谢,但同样的问题仍然存在,因为它应该只返回4个值,因为每个列表中只有4个值。仍然返回16个值。所以它应该将标记和toms列表中的值添加到一起,然后添加到最终列表中。像做梦一样工作!我正要把这个标记为已回答。但如果可以的话,你能详细阐述一下你的逻辑吗?发生了什么事?因为我不确定它是如何仅仅根据一个计数从toms获得值的。如果能完全理解这个逻辑就好了。再次感谢您。对于getMarkupPrice中的每个值,上面的代码将根据用于跟踪toms中当前值的索引j从toms中添加相应的值,并将结果添加到totalSellingPrice列表中。foreach内的附加if块检查toms是否超出值。如果是,中断时间;语句刚刚退出foreach循环的执行。非常感谢,我花了一点时间理解索引器J从其索引位置返回值。谢谢。你能详细说明一下吗?为什么会成倍增长?当我显式地应用加法时,您正在寻找4个值,但最终得到16个值。这是因为你运行了2个foreach循环。i中有4个值,m中有4个值。基本上,在你的第一个foreach中,你循环通过i,然后你循环通过所有m值,加上i+m。这将给出u4值。现在,当你回到i循环,你在i+1重复整个过程。经过4次迭代后,您将获得16个值。