在施工期间访问匿名类型的成员

时间:2013-02-22 05:03:46

标签: c# linq anonymous-types

在构建过程中有没有办法访问匿名类型的成员?

例如

 enumerable.select(i => new
 {
     a = CalculateValue(i.something), // <--Expensive Call
     b = a + 5 // <-- This doesn't work but i wish it did
 }

愿意考虑替代方案以实现相同的目标,这基本上是我正在预测我的枚举和部分投影是一个昂贵的计算,其价值被多次使用,我不想重复它,也重复这个电话只是感觉不干。

1 个答案:

答案 0 :(得分:6)

这是不可能的,因为尚未实际分配新的匿名对象,因此其属性也不可用。您可以执行以下操作:

enumerable.select(i =>
    {
        //use a temporary variable to store the calculated value
        var temp = CalculateValue(i.something); 
        //use it to create the target object
        return new 
        {
            a = temp,
            b = temp + 5
        };
    });