自定义设置器的行为类似于默认设置

时间:2018-12-21 19:57:17

标签: c# setter

我在具有自定义Getter且没有Setter的模型中有一个属性。现在,我需要将值设置为Percent属性。问题是,与此属性相关联的逻辑很多,我想避免更改除此属性之外的其他代码。

我想直接将值设置为Percent属性,而不是某些私有字段。基本上,与默认的getter和setter相同。可以使用自定义设置器来实现它吗?

我想做这样的事情:

public decimal Percent
{
    get { return Count / Total }
    set { this.Percent = value }
}

编辑:更多背景信息。在模型中,我有几个表示数值运算的属性,例如Count,Sum,Total,Deviation等。大多数属性是在SQL查询中计算并直接填充的。所有属性都有默认的getter和setter。不会从db加载仅Percent属性,因为它基于先前填充的Count和Total属性计算其值。

该模型用于List(List ..)中,并且某些项目的Percent属性与默认Count / Total的其他项目的计算方式不同,这就是为什么我需要对该属性实施set选项的原因。所以我想将其值设置为

private void CalculatePercents(List<StatisticOperations> Stats)
{
    // I have a way to get exactly the index I need and the calculation of 
    // the percent value (30), it just isn't necessary here, so for 
    // illustration:

    Stats[15].Percent = 30;
}

类型没关系,假设它们都是十进制。

1 个答案:

答案 0 :(得分:1)

如果您需要带有setter的派生/计算属性,则可以应用getter的相反方法:

public decimal Percent
{
    get => (decimal)Count / Total;
    set => Count = (int)(Total * value);
}

假设CountTotal均为int