在c#中设置属性的十进制值不起作用

时间:2015-04-08 13:40:24

标签: c# asp.net

下面我在c#中有公共财产 得到了工作。但是设置不起作用。

private decimal _basketTotal;    
public decimal BasketTotal
{
   get
   {
     decimal total = PreDiscountTotal - DiscountTotal;
     if (total < 0)
     {
                return 0;
     }
     else
     {
        return total;
     }

   }
   set 
     {
        this._basketTotal = value;
     }
}

我试过这种方式设置BasketTotal的值

Basket baskObj = WebSession.Basket as Basket;
baskObj.BasketTotal = (decimal)localTotal;

当我调试上面的代码。 _basketTotal是有价值的。但是BasketTotal没有得到这个价值。

2 个答案:

答案 0 :(得分:3)

您的get未返回_basketTotal,因此永远不会使用该值。

get中,您可以看到您从未提及_basketTotal,而您每次都会重新计算它。

尝试这样的事情

private decimal? _basketTotal;    
public decimal BasketTotal
{
    get
    {
        if(_basketTotal == null)
        {
            //recalculate the total
             decimal total = PreDiscountTotal - DiscountTotal;
             if (total < 0)
             {
                _basketTotal = 0;
             }
             else
             {
                _basketTotal = total;
             }
        }
        return (decimal)_basketTotal;
    }
    set 
    {
        this._basketTotal = value;
    }
}

答案 1 :(得分:0)

如果你想在你的属性中设置值,然后让你的属性返回你设置的相同值,你的getter需要返回你的值设置的变量。为了过度简化你的属性,它需要类似于下面的:

private decimal _basketTotal;    
public decimal BasketTotal
{
    get
    {
        return _basketTotal;
    }
    set 
    {
        this._basketTotal = value;
    }
}

如果你需要一个默认值,你可以在构造函数中定义它,或者为getter添加一些条件,如DLeh的答案所示。