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");
        }
    }
}

OrderItem クラス:

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 を返します。そうでない場合。

4

2 に答える 2

3

ifステートメントが true を返すが、ループが反復するものが何もない場合、メソッドは何も返しません。
これは、別のスレッドがリストを変更した場合に発生する可能性があります。

ループの後 で、外側のif/elseを完全に、そして単純に取り除く必要があります。return 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 に答える