0

我有一个类的实例,我想更改该类的所有十进制字段的值:

var rec = new MyClass();
 rec.GetType()
  .GetFields()
  .Select(field => field.GetValue(rec)
  .Where(value => value is decimal)
  .Select(value => value = GetDecimalValue())
  .ToList();

字段的值保持不变。有什么建议么?

4

3 回答 3

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) 
}
于 2013-11-13T03:30:03.457 回答
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));
于 2013-11-13T06:21:45.523 回答
0

您可以编辑或扩展课程吗?如果可以的话,我建议向该类添加一个方法,或扩展该类以使其执行您需要的逻辑。或者您是否尝试对任何具有小数字段的类执行此操作?

于 2013-11-13T03:28:33.627 回答