我有一个类的实例,我想更改该类的所有十进制字段的值:
var rec = new MyClass();
rec.GetType()
.GetFields()
.Select(field => field.GetValue(rec)
.Where(value => value is decimal)
.Select(value => value = GetDecimalValue())
.ToList();
字段的值保持不变。有什么建议吗?
答案 0 :(得分:1)
这是因为你只是在复制价值观。你应该做这样的事情(我没有编译它,我的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)
}
答案 1 :(得分:1)
为了用更多的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));
答案 2 :(得分:0)
你可以编辑或扩展课程吗?如果可以的话,我建议在类中添加一个方法,或者扩展类,使其执行所需的逻辑。或者您是否尝试对具有十进制字段的任何类执行此操作?