首页 > 解决方案 > 自定义设置器的行为类似于默认设置器

问题描述

我在一个模型中有一个属性,它有自定义的 Getter,没有 Setter。现在我需要将值设置为 Percent 属性。问题是,有很多逻辑连接到这个属性,我想避免更改其他代码,而不是这个属性。

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

我很想做这样的事情:

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

编辑:更多背景。在模型中,我有几个属性表示数字运算,如 Count、Sum、Total、Deviation 等。大多数属性都是在 SQL 查询中计算并直接填充的。所有属性都有默认的 getter 和 setter。只有 Percent 属性没有从 db 加载,因为它根据之前填充的 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;
}

类型无关紧要,假设都是十进制。

标签: c#setter

解决方案


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

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

假设Count并且Total都是int


推荐阅读