我有一个类的实例,我想更改该类的所有十进制字段的值:
var rec = new MyClass();
rec.GetType()
.GetFields()
.Select(field => field.GetValue(rec)
.Where(value => value is decimal)
.Select(value => value = GetDecimalValue())
.ToList();
字段的值保持不变。有什么建议么?
这是因为您只是在复制值。你应该做这样的事情(我没有编译它,我的 c# 有点生锈)
var rec = new MyClass();
var fields = rec.GetType()
.GetFields()
.Where(value => value.GetValue(rec) is decimal)
.ToList();
foreach(var field in fields) {
field.setValue(rec, 1.234)
}
只是为了用更多 LINQ 和 Lambda 更新答案,我使用了 foreach 扩展方法。
var rec = new MyClass();
var fields = rec.GetType()
.GetFields()
.Where(value => value.GetValue(rec) is decimal)
.ToList();
fields.ForEach(fieldInfo => fieldInfo.SetValue(rec, 1.234));
您可以编辑或扩展课程吗?如果可以的话,我建议向该类添加一个方法,或扩展该类以使其执行您需要的逻辑。或者您是否尝试对任何具有小数字段的类执行此操作?