是否可以为params Func<;T>;

本文关键字:lt gt Func params 是否 | 更新日期: 2023-09-27 18:21:21

有可能实现这样的目标吗:

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参数?还是我走得太远了?

是否可以为params Func<;T>;

否,但如果您真的希望它们在同一列表中,则可以进行连接。

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

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

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

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

编辑:在重读时修复语法…