gpt4 book ai didi

c# - 使用两个列表中的项目创建第三个列表时遇到问题

转载 作者:行者123 更新时间:2023-11-30 20:25:36 25 4
gpt4 key购买 nike

我正在尝试使用两个列表的组合值来组合一个列表(我们称之为 FinalList):Customers 和 Products。假设我们有四个客户和一个产品,FinalList 应该有四个项目的最终结果(每个客户一个)。

例如:

Customer List:
Customer Code | Customer Name | Customer Branch ID
------------------|-----------------------|------------------------
001 | Tom | T001
002 | Dick | T002
003 | Harry | T003
004 | Jerry | T004


Product List:
Product Code | Product Name
------------------|---------------------
P001 | Apple

目前我正在尝试这样做:

var finalList = new List<ProductDetailDto>();
var customerList = new List<CustomerGroup>();

/// productsList is also type List<ProductDetailDto>();

for (var j = 0; j<= productsList.Count()-1; j++)
{
for (int i = 0; i <= customerList.Count() - 1; i++)
{
var singleDetail = new ProductDetailDto();

// Copy current products to groupDetail
singleDetail = productsList[j];

// Assemble rest of the info
singleDetail.CustCode = customerList[i].Customer.CustomerCode;
singleDetail.CustName = customerList[i].Customer.CustomerName;
singleDetail.CustBranchId = customerList[i].Customer.CustomerBranchId;

finalList.Add(singleDetail);
}
}

return finalList;

然而,执行此操作后,finalList 仅使用 Jerry 作为所有四个项目的客户。我也尝试使用 foreach,结果相同。我不太确定我在这里做错了什么,我很尴尬,因为这对某些人来说似乎很基本,所以我希望有新的眼光来发现我在这里犯的错误...

另外,有什么方法可以进一步优化它吗?

一如既往,我们将不胜感激任何帮助。谢谢。

最佳答案

这里:

// Copy current products to groupDetail
singleDetail = productsList[j];

您实际上并没有复制当前产品,而是从 productsList 复制对您的项目的引用,并且在每个内部循环迭代中,您覆盖同一 productsList[j] 元素中的属性。

您可能想阅读更多有关赋值如何作用于引用类型的信息:
https://www.microsoftpressstore.com/articles/article.aspx?p=2454676

如果要对两个列表进行叉积,则需要创建一个新对象:

var finalList = new List<ProductDetailDto>();
var customerList = new List<CustomerGroup>();

/// productsList is also type List<ProductDetailDto>();

for (var j = 0; j<= productsList.Count()-1; j++)
{
for (int i = 0; i <= customerList.Count() - 1; i++)
{
var singleDetail = new ProductDetailDto
{
ProductCode = productsList[j].ProductCode,
ProductName = productsList[j].ProductName
// and whatever other properties your product have
};

// Assemble rest of the info (these can actually go to object initializer too)
singleDetail.CustCode = customerList[i].Customer.CustomerCode;
singleDetail.CustName = customerList[i].Customer.CustomerName;
singleDetail.CustBranchId = customerList[i].Customer.CustomerBranchId;

finalList.Add(singleDetail);
}
}

return finalList;

对于我来说,令我困惑的是您的 ProductDetailDto 中有 CustCodeCustNameCustBranchId 等属性>。对于 productsList 中的对象,这些属性是否只是空的?考虑专门为这些需求创建另一个类,例如 CustomerProductDto,这样您的意图就会变得更加明确。

您可以使用 LINQ 对此进行优化:

var items = from p in productsList
from c in customerList
select new ProductDetailDto
{
ProductCode = p.ProductCode,
ProductName = p.ProductName
CustCode = c.Customer.CustomerCode,
CustName = c.Customer.CustomerName,
CustBranchId = c.Customer.CustomerBranchId,
};
return items.ToArray();

关于c# - 使用两个列表中的项目创建第三个列表时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51418519/

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