【问题标题】:IEnumerable transform extension function using delegate?使用委托的IEnumerable转换扩展功能?
【发布时间】:2011-03-22 13:57:24
【问题描述】:

我刚刚发现我对 delegateaction 以及另一个我想要的不太流利......

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

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

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

【问题讨论】:

  • 你不能使用 Select - list.Select(x =&gt; return new {} )

标签: .net generics extension-methods ienumerable


【解决方案1】:

如果您使用的是 .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
                  });

【讨论】:

  • 太好了,select方法确实是我需要的!
  • 您介意等待 5 分钟再回答我的问题吗?一些程序员内置了 5 分钟的“接受-回答-延迟”.... ;)
猜你喜欢
  • 1970-01-01
  • 2010-10-07
  • 2016-05-20
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多