是否可以为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
参数?还是我走得太远了?
否,但如果您真的希望它们在同一列表中,则可以进行连接。
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()
);
编辑:在重读时修复语法…