使用另一个类的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。

使用另一个类的bool方法搜索列表框.获得';并不是所有的代码路径都返回一个值';.知道为什么吗

如果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;