Можно ли указать оператор foreach для элемента params Func <T> - PullRequest
1 голос
/ 26 января 2012

Можно ли достичь чего-то подобного:

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 ]

1 голос
/ 26 января 2012

Нет, но вы можете объединить, если вы действительно хотите, чтобы они были в одном списке.

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

Это оценивает InstanceC.List раньше, чем ваш код, и, возможно, не является вашим намерением.

1 голос
/ 26 января 2012

Я думаю, вы ищете что-то подобное.Не скомпилировали, это может не сработать.

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

РЕДАКТИРОВАТЬ: Исправление синтаксиса, как я перечитал его ...

...