是否有可能实现这样的目标:
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
参数?或者我走得太远了?
答案 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
,可能不是您的意图。