【发布时间】:2021-04-24 08:06:54
【问题描述】:
你好社区我有一个product class 有一个名为public_price 的属性,我在get 集中应用了函数,但是当比较detailcombo 对象是否不同于null 时,它会抛出System.StackOverflowException 错误,为什么会发生这种情况,我该如何解决?
这是我的班级产品:
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; }
}
}
这是我的班级 DetelleCombo:
public class DetalleCombo
{
public Guid DetalleComboId { get; set; }
public virtual Producto Producto { get; set; }
public decimal Cantidad { get; set; }
public decimal Precio { get; set; }
}
这是我的班级 DetlleGenerico:
public class DetalleGenerico
{
public Guid DetalleGenericoId { get; set; }
public virtual Producto Producto { get; set; }
public bool Es_Seleccionado { get; set; }
}
【问题讨论】:
-
提示:在
return item.Producto.Precio_Publico;这一行设置断点并学习调试器的使用方法 -
在你的setter和getter中放一个断点,当调试器中断时,一步一步进入,看看为什么getter或setter会调用自己。堆栈溢出意味着函数、属性或方法无限次调用自身。
-
强烈建议 - 将大部分代码放入您的 get 部分引用的私有方法中。更强烈的建议 - 在该部分代码周围放置一个 try catch,否则您将面临不必要的致命崩溃的风险。总是尝试 catch,尤其是在 get/set 方法中
标签: c# asp.net-core asp.net-web-api blazor stack-overflow