【问题标题】:Can you do calculations in the get/set ? c#您可以在 get/set 中进行计算吗? C#
【发布时间】:2021-04-24 22:13:54
【问题描述】:

你能在 set 子句中做一个计算吗?然后在实施时返回总数?`

    public decimal TotalCost
     { 
      set
      { this.costTotal = (decimal)prodCost + (decimal)shipping + (decimal)insurance)}
       get
      { return this.costTotal}
     }

【问题讨论】:

  • 是的,有可能。请记住,costTotal 仅在您使用 setter 时计算。但是,当您不使用 setter 中的 value 变量时,为什么还要对此类属性使用 setter?那没有意义。也许您正在寻找一个只有 getter 的属性,它可以即时计算值。
  • public decimal TotalCost => (decimal)prodCost + (decimal)shipping + (decimal)insurance);(没有二传手)。

标签: c# calculation


【解决方案1】:

你能在set子句中做一个计算吗?

当然。但是,在您的具体情况下,尚不清楚您为什么要这样做。 setter 的目的是允许类的用户安全地操作其对象的字段。这是使用value 关键字完成的。由于您只对使用现有数据计算值感兴趣,因此甚至没有理由使用 setter。在 getter only 属性中进行计算似乎更合适:

public decimal TotalCost
{ 
    get
    {
        return (decimal)prodCost + (decimal)shipping + (decimal)insurance);
    }
}

上述代码的较短版本:

public decimal TotalCost => (decimal)prodCost + (decimal)shipping + (decimal)insurance;

【讨论】:

    【解决方案2】:

    别人说的,但也许你正在寻找一种方法:

    public decimal CostTotal { get; private set; }
    
    (...)
    
    public void SetTotalCost(decimal prodCost, decimal shipping, decimal insurance)
    {
       this.CostTotal = prodCost + shipping + insurance);
    }
    

    【讨论】:

      【解决方案3】:

      我建议使用以下代码来读取和写入您的属性。

      private decimal totalCost;
      public decimal TotalCost
           { 
             get { return totalCost = (decimal)prodCost + (decimal)shipping + (decimal)insurance);}
             set { totalCost = value;}
           }
      

      【讨论】:

      • 这是一个非常糟糕的建议,因为设置 TotalCost 根本没有任何效果,当回读 TotalCost 时,它会显示与集合中使用的完全不同的数字
      • 使用被忽略的 setter 会使该属性的任何用户感到困惑
      • @TimO。您需要三个属性,一个用于 ProdCost,一个用于 Shipping,一个用于 Insurance,每个属性都是可获取和可设置的。然后,您需要一个 TotalCost 属性,即 Get-only。您当前的示例没有意义
      • @LordWilmore 如果计算的值用于另一个类或数据传输对象,则可能还需要“设置”。这就是我所做的。但是,这可能不在最佳实践范围内。
      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2016-04-12
      • 2020-11-15
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多