c# - 自定义设置器的行为类似于默认设置器
问题描述
我在一个模型中有一个属性,它有自定义的 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;
}
类型无关紧要,假设都是十进制。
解决方案
如果您需要带有 setter 的派生/计算属性,则可以应用 getter 的反向:
public decimal Percent
{
get => (decimal)Count / Total;
set => Count = (int)(Total * value);
}
假设Count
并且Total
都是int
推荐阅读
- php - 无法从 yii 中的控制器渲染视图
- python - 尝试使用 flask 和 flask_sqlachemy 创建搜索
- java - Spring Security中的401未经授权的错误
- javascript - 如何在兄弟提交上呈现 vuejs 组件
- javascript - 如何在 app.component 外使用带有路由器插座的 Angular 9 导航栏
- laravel - OrderBy 来自关系,Laravel
- python - 使用部分将多个可迭代参数传递给 ProcessPoolExecutor.map
- sql-server - sys.objects get modfiy_date 显示空表
- javascript - 带有数组的嵌套循环无法按预期工作
- python - 跨使用基于相同服务的后端的多个域启用 SSO