在使用foreach
的代码中,即使我输入列表中不存在的id,它仍然会继续。为什么会发生这种情况,我该如何解决?
foreach (Product item in listOfProducts)
{
if (item.Id == id)
{
item.UnitInStocks = unitsInStocks;
item.Price = price;
Console.WriteLine("the product details has been changed");
Console.ReadLine();
}
else
Console.WriteLine("this product id does not exist");
}
break;
}
答案 0 :(得分:2)
在else
关键字后,您似乎缺少一个开放式大括号。
我假设你的问题是错误而不是你的代码,因为
就目前而言,由于大括号不匹配,代码将无法编译。
如果你输入了缺失的大括号,那么你在第一次迭代中break
退出foreach
循环,第一个产品是否具有匹配的id。
如果您已开始使用foreach
,那么您可能需要以下内容:
var productFound = false;
foreach (Product item in listOfProducts)
{
if (item.Id == id)
{
productFound = true;
item.UnitInStocks = unitsInStocks;
item.Price = price;
Console.WriteLine("the product details has been changed");
break;
}
}
if (!productFound)
{
Console.WriteLine("this product id does not exist");
}
我更愿意一起避开foreach
:
var product = listOfProducts.FirstOrDefault(prod => prod.Id == id);
if (product != null)
{
product.UnitInStocks = unitsInStocks;
product.Price = price;
Console.WriteLine("the product details has been changed");
}
else
{
Console.WriteLine("this product id does not exist");
}
您需要在文件顶部using System.Linq;
使用FirstOrDefault
。