C # StackOverflowException - PullRequest
       13

C # StackOverflowException

1 голос
/ 01 июня 2010

Проблема: я пытаюсь обновить список. Если идентификатор определенного товара уже существует в списке, я хочу добавить его количество. Если нет, то я хочу добавить еще один элемент в список.

            cart = (List<OrderItem>)Session["cart"];

            for(int counter = cart.Count-1; counter >= 0; counter--)
            {
                if (cart[counter].productId == item.productId)
                {
                    cart[counter].productQuantity += item.productQuantity;
                }
                else if (counter == 0)
                {
                    cart.Add(item);
                }
            }

cart[counter] и item представляют экземпляр (ы) моего пользовательского объекта. В настоящее время, когда я, наконец, нахожу соответствующий идентификатор, все кажется, как будто оно должно работать, но я получаю исключение StackOverflowException в моем классе пользовательских объектов.

    public int productQuantity
    {
        get
        {
            return _productQuantity;
        }
        set
        {
            productQuantity = value;
        }
    }

Бросается прямо в открытую скобку "набора". Может кто-нибудь, пожалуйста, скажите мне, что, черт возьми, не так, потому что я занимался этим последние 2+ часа безрезультатно. Заранее спасибо.

Ответы [ 4 ]

8 голосов
/ 01 июня 2010

проблема в вашем установщике количества продукта

должно читаться как:

set
    {
        _productQuantity= value;
    }

edit (соглашение об именах):

public class Vertex3d
{
    //fields are all declared private, which is a good practice in general 
    private int _x; 

    //The properties are declared public, but could also be private, protected, or protected internal, as desired.
    public int X
    { 
        get { return _x; } 
        set { _x = value; } 
    }
}
3 голосов
/ 01 июня 2010

Почему бы просто не использовать это вместо этого? public int productQuantity {get; задавать; }

Но недостаток был в _

public int productQuantity {
    get {
        return _productQuantity;
    }
    set {
        _productQuantity = value;
    }
}

cart = (List<OrderItem>)Session["cart"];
int index = cart.Find(OrderItem => OrderItem.productId == item.productId);
if(index == -1) {
    cart.Add(item);
} else {
    cart[index].productQuantity += item.productQuantity;
}
3 голосов
/ 01 июня 2010

Замените productQuantity = value; на _productQuantity = value; (вы повторяетесь бесконечно, вызывая сеттер снова и снова)

2 голосов
/ 01 июня 2010
public int productQuantity
{
   get
   {
      return _productQuantity;
   }
   set
   {
      _productQuantity = value; //this should be an assignment to a member variable.
   }
}
...