是否可以为params Func <t> </t>的元素指定foreach语句

时间:2012-01-25 22:14:26

标签: c# .net params

是否有可能实现这样的目标:

Process(
    () => InstanceA.PropertyA,
    () => InstanceB.PropertyB,
    () => InstanceC.List.Select(x => x.PropertyC) // obviously not a proper way to do it
);

第三行将取代:

foreach(var item in InstanceC.List)
{
    Process(() => item.PropertyC);
}

最后一部分:

Process(params Func<object>[] args) // body is in this case irrelevant

那么,是否有一个漂亮的语法糖我可以用来列表的内部元素返回到外部params参数?或者我走得太远了?

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找这样的东西。没有编译它,这可能不起作用。

Process( (new List<Func<Object>> {
    () => InstanceA.PropertyA,
    () => InstanceB.PropertyB }).Union( 
      InstanceC.List.Select(x => new Func<Object>(() => x.PropertyC))
    ).ToArray()
);

编辑:在重新阅读时修复语法......

答案 1 :(得分:1)

不,但如果你真的希望它们在同一个列表中,你可以连接。

var firstTwo = new Func<object>[] 
{ 
  () => InstanceA.PropertyA, 
  () => InstanceB.PropertyB 
};
Process(firstTwo.Concat(InstanceC.List.Select(x => () => x.PropertyC).ToArray());

这比您的代码更早评估InstanceC.List,可能不是您的意图。