Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加到列表<;字符串>;但是在添加项目时遇到问题_C#_List_For Loop_Foreach - Fatal编程技术网

C# 添加到列表<;字符串>;但是在添加项目时遇到问题

C# 添加到列表<;字符串>;但是在添加项目时遇到问题,c#,list,for-loop,foreach,C#,List,For Loop,Foreach,我有两个清单,每个清单上有200个项目。 列表A包含产品的名称。 清单B包含产品的价格 我还有一份清单(清单C),里面有250个项目,包括产品的名称和价格 现在,我试着比较列表A的名称,看看它们是否存在于列表C中,如果存在,我想使用列表C中的价格 这就是我迄今为止所尝试的: foreach (var item in wiznzList) { for (int j = 0; j < nameList.Count; j++) { if (nameList[j]

我有两个清单,每个清单上有200个项目。 列表A包含产品的名称。 清单B包含产品的价格

我还有一份清单(清单C),里面有250个项目,包括产品的名称和价格

现在,我试着比较列表A的名称,看看它们是否存在于列表C中,如果存在,我想使用列表C中的价格

这就是我迄今为止所尝试的:

foreach (var item in wiznzList)
{
    for (int j = 0; j < nameList.Count; j++)
    {
        if (nameList[j] == item.ProductName)
        {
            wizNzPriceList.Add(item.Price);
        }
        else
        {
            wizNzPriceList.Add("No Product");
        }
    }
}
foreach(wiznzList中的变量项)
{
对于(int j=0;j
我想浏览一下名字列表,检查它们是否存在于列表C中,如果存在,我想从列表C中添加价格,如果不存在,我希望它不写任何产品

所以,最后我想要3个列表,每个列表中有200个项目


相反,当我运行此命令时,会将10040000项添加到列表中。有人能给我指出正确的方向吗。

如果我对你的问题理解正确的话(陪审团对此表示怀疑)

您可以使用
ToDictionary
Select

var dict = products.ToDictionary(x => x.ProductName, x => x.Price);
var results = names.Select(x => dict.TryGetValue(x, out var value) ? value.ToString() : "No Product");

注意:对于O(n^2)时间复杂度,可以使用
任意
。但是,
ToDictionary
将更有效

您可以尝试使用LINQ并用方法替换内部循环

foreach(wiznzList中的变量项)
{
if(nameList.Any(p=>p==item.ProductName)
{
wizNzPriceList.Add(项目价格);
}
其他的
{
wizNzPriceList.添加(“无产品”);
}
}

我找到了一个代码,它可以实现您希望它做的事情

对象产品(字符串pName、浮点pPrice)

列出产品列表,以便您可以存储和更改价格

listB浮动列表,未使用

列表C带有pName和pPrice的产品列表

CompareA_With_C()方法首先检查相同的产品,如果为true,则将列表C的价格放入listA,并中断内部循环

else if语句等待循环遍历整个listC,如果没有找到匹配的pName,则在listA中将pName更改为“no Product”

代码:

 void CompareA_With_C()
        {
            for (int i = 0; i < listA.Count; i++)
            {
                for (int j = 0; j < listC.Count; j++)
                {
                    string a = listA[i].pName;
                    string c = listC[j].pName;

                    if (string.Equals(a, c))
                    {
                        listA[i].pPrice = listC[j].pPrice;
                        break;
                    }
                    else if (j == (listC.Count - 1))
                    {
                        listA[i].pName = "No Product";
                        listB[i] = 0.0f;
                    }
                }
            }
        }
void CompareA_与_C()
{
for(int i=0;i
我使用下面的代码解决了我的问题,非常感谢Crispi

for (int i = 0; i < nameList.Count; i++)
        {
            for (int j = 0; j < wiznzList.Count; j++)
            {
                string a = nameList[i];
                string c = wiznzList[j].ProductName;

                if (string.Equals(a, c))
                {
                    wizNzPriceList.Add(wiznzList[j].Price);
                    break;
                }
                else if (j == (wiznzList.Count - 1))
                {
                    wizNzPriceList.Add("No Product");
                }
            }
        }
for(int i=0;i

我现在获得了所需的200个结果。感谢大家抽出时间。

您是否尝试在.Add()之后放置一个
中断;
。您也可以使用
if(nameList.Contains(item.ProductName))
而不是内部for循环。您好,感谢您的快速回复。我尝试了Contains()但由于产品名称相似,我改为使用==来代替。添加break;会给我50200个项目,而不是10040000个。嘿,欢迎使用stack overflow。请阅读。您可以编辑您的帖子,以包含列表的数据,以帮助重现问题。据我所知,ListB在功能上没有被使用,我们为什么在意关于它?列表A是一个包含1个网站的200种产品的列表,列表B包含这些产品的价格。列表C包含250种不同网站的产品和价格。谢谢您的回复,不幸的是,这给了我相同的结果。@SJKim这个问题中的代码不可能导致“10040000项添加到列表中”…您好,您是对的,我把它放在了一个For循环中,我想这使它得到了10040000项。我现在得到了253项的结果,这是列表C中的项目数量。我仍在试图弄清楚我怎么只能得到200项结果。PS:noob就是我:)另外,我对.add()也不满意听起来像是增加了项目的#,是不是有点像.replace()?但是,我还没有研究列表:(你好,我尝试过这个,它给了我50400个结果。如果我使用for循环并将foreach循环放入其中,它会给我太多的结果。谢谢你的回复:),我是一个大傻瓜,我也完全改变了我的答案,现在它工作了!可能写得更紧凑,但灰色单元格现在已经很累了:)PS:你可以用字符串替换listA中的产品,并稍微调整代码。删除了不必要的代码,这是我作为初学者所能做的最好的:)嗨,谢谢你花时间研究这个,我会尝试t他的现在:)