使用另一个类的bool方法搜索列表框.获得';并不是所有的代码路径都返回一个值';.知道为什么吗
本文关键字:返回 为什么 一个 路径 bool 方法 另一个 搜索 列表 并不是 获得 | 更新日期: 2023-09-27 18:24:22
更多详细信息请参见本文底部。我的代码:
表单类别:
public partial class Form1 : Form
{
public ShoppingBasket myBasket = new ShoppingBasket();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (myBasket.IsProductInBasket("Apples"))
{
MessageBox.Show("Yes");
}
else
{
MessageBox.Show("No");
}
}
}
订单项类别:
public class OrderItem
{
public string ProductName { get; set; }
public decimal LatestPrice { get; set; }
public int Quantity { get; set; }
public decimal TotalOrder { get; set; }
public OrderItem(string productName, decimal latestPrice, int quantity)
{
ProductName = productName;
LatestPrice = latestPrice;
Quantity = quantity;
TotalOrder = latestPrice * quantity;
}
}
购物类:
public class ShoppingBasket : List<OrderItem>
{
public ShoppingBasket()
{
}
public Form1 fm1;
public bool IsProductInBasket(string productName) //Error of " 'ShoppingBasket.IsProductInBasket(string)': not all code paths return a value"
{
if (fm1.lstCart.Items.Count > 0)
{
for (int i = 0; i < fm1.lstCart.Items.Count; i++) // Warning of 'Unreachable code detected'
{
if (fm1.lstCart.Items[i].ToString().Contains(productName))
{
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
}
为什么我会犯那个错误?IsProductInBasket将始终返回true或false,列表框中永远不会有负数,因此如果计数为0,则返回false,如果计数为零,则遍历列表框,如果找到则返回true,如果没有找到则返回false。
如果if
语句返回true,但循环没有可迭代的内容,则方法永远不会返回任何内容
如果另一个线程修改了列表,则可能会发生这种情况。
您应该完全去掉外部的if
/else
,并在循环之后简单地去掉return false
。
此外,您不希望在内部else
中使用return false
现在,如果第一个产品不匹配,您的循环将立即停止,而不检查其他项目。
这是代码中的几个错误。frm1在代码中的任何位置都没有初始化。你会在这里得到异常
if (fm1.lstCart.Items.Count > 0) //Object reference
你应该像这个一样更改你的代码
for (int i = 0; i < fm1.lstCart.Items.Count; i++)
{
if (fm1.lstCart.Items[i].ToString().Contains(productName))
{
return true;
}
else
{
return false;
}
}
return false;