0

更多细节在这个底部。我的代码:

表格类:

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,如果计数为 0,则通过列表框,如果找到则返回 true,否则返回 false如果没有。

4

2 回答 2

3

如果if语句返回 true,但循环没有可迭代的内容,则您的方法将永远不会返回任何内容。
如果另一个线程修改列表,则可能会发生这种情况。

您应该在循环之后 完全摆脱外部if/ 。elsereturn false

此外,您不想return false在内部else.
现在,如果第一个产品不匹配,您的循环将立即停止,而不检查其他项目。

于 2013-07-23T16:41:34.283 回答
1

这是您的代码中的几个错误。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;
于 2013-07-23T16:41:44.703 回答