更改类的所有十进制字段的值

时间:2013-11-13 03:19:28

标签: c# linq

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

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

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

3 个答案:

答案 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)

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