覆盖IEnumerable对象上的属性

时间:2015-07-07 17:20:54

标签: c#

我有这个对象:

var child = Mapper.Map<List<ChildViewModel>>( model.ChildData );

然后我回复:

return new OutputViewModel
  {
      ChildData = child
  }; 

但是在中间我需要对其中一个子属性进行更改,我试过这个:

var dummy = child.Select(e => e.Number = FormatNumber(e.Number, e.Mask));

所以当我返回OutputViewModel作业完成后,我的Number属性被格式化了,有没有更好的方法来做,因为我不喜欢它:(

2 个答案:

答案 0 :(得分:1)

LINQ用于查询,而不是用于修改集合。由于传递给lambda表达式的引用,因为有些副作用,您可以看到集合中的更改。

更好的方法是使用简单的迭代,在每次迭代中修改对象的属性,然后返回集合,以更好的方式传达意图,IMO。

答案 1 :(得分:0)

为什么不制作一个具有格式化数字的只读属性?

public class OutputViewModel
{
    public decimal Number { get; set; }
    public object Mask { get; set; }
    public string NumberFormatted 
    {
        get { return FormatNumber(Number, Mask); }
    }
}