如何解决 System.StackOverflowException?

问题描述

hello community 我有一个 product class,它有一个名为 public_price属性,我将 get 集中的函数应用到该属性,但在比较 {{1 }} 对象与 null 不同,为什么会发生这种情况,我该如何解决

这是我的班级产品:

System.StackOverflowException

这是我的班级DetalleCombo:

detailcombo

这是我的班级DetalleGenerico:

 public class Producto
    {
        [Key]
        public Guid ProductoId { get; set; }
        public Guid InquilinoId { get; set; }
        private string Nombre { get; set; }

        public virtual List<DetalleCombo> DetalleCombo { get; set; } 

        private decimal _PrecioPublico;
        public decimal Precio_Publico
        {
            get
            {               
                decimal total = 0;
                if (DetalleCombo != null)
                {
                    foreach (var item in DetalleCombo)
                    {
                        total += item.Precio * item.Cantidad;
                    }

                    return total;
                }
                else if (DetalleGenerico != null)
                {
                    if (Usar_PrecioGenerico == true)
                    {
                        return _PrecioPublico;
                    }
                    else
                    {
                        foreach (var item in DetalleGenerico)
                        {
                            if (item.Es_Seleccionado == true)
                            {
                                return item.Producto.Precio_Publico;
                            }
                        }
                        return 0;
                    }
                }
                else
                {
                    return _PrecioPublico;
                }
            }
            set { _PrecioPublico = value; }
        }
}

错误

enter image description here

解决方法

在这段代码中:

foreach (var item in DetalleGenerico)
{
    if (item.Es_Seleccionado == true)
    {
        return item.Producto.Precio_Publico;
    }
}
return 0;

代码行

return item.Producto.Precio_Publico;

导致 Precio_Publico 属性被无休止地调用。你不断地在这个 foreach 循环中反复。

每次以这种方式调用 Precio_Publico 时,您都会向堆栈添加一个堆栈帧,直到堆栈用完空间,导致您的堆栈溢出。