使用委托的IEnumerable转换扩展函数?

时间:2011-03-22 13:57:25

标签: .net generics extension-methods ienumerable

我刚刚发现我不能像delegateaction那样流利,而另一个我想要的......

我有一个IEnumerable<T>我想使用委托函数转换为IEnumerable<object>,该函数创建object作为匿名对象。 扩展方法在这里会派上用场还是已经存在?

这(或类似的东西)应该是可能的吗?

IEnumerable<SomeBllObject> list;
IEnumerable<object> newList = list.Transform(x => return new {
                        someprop = x.SomeProp, 
                        otherprop = x.OtherProp
                  });

1 个答案:

答案 0 :(得分:8)

如果您使用的是.NET 4,那么您刚刚描述了Select方法:

IEnumerable<object> newList = list.Select(x => new {
                        someprop = x.SomeProp, 
                        otherprop = x.OtherProp
                  });

对于.NET 3.5,您需要转换委托的结果,因为它没有通用的协方差:

IEnumerable<object> newList = list.Select(x => (object) new {
                        someprop = x.SomeProp, 
                        otherprop = x.OtherProp
                  });

或者使用隐式类型的局部变量并获得强类型序列:

var newList = list.Select(x => new {
                        someprop = x.SomeProp, 
                        otherprop = x.OtherProp
                  });