Поскольку результат не объединен во всех делегатах
код становится эквивалентом
Minus(1);
return Square(1);
изменить код, чтобы изменить переменную на месте.
public delegate void Transformer(ref int x);
public static void Transform(int[] values, Transformer t)
{
for (int i = 0; i < values.Length; i++)
{
t(ref values[i]);
}
}
static void Square(ref int x)
{
x*= x;
}
static void Minus(ref int x)
{
x--;
}
Гораздо лучшим решением будет использование агрегата linq, поскольку вы можете преобразовать решение, не затрагивая источник.
public static int[] Transform(int[] values, params Func<int,int>[] t){
return values.Select(v=>t.Aggregate(v,(x,f)=>f(x))).ToArray();
}
Тогда вы можете просто позвонить
values=Transform(values,new[] { Minus,Square });
или
int[] values = {1,2,3};
int[] result = Transform(values,Minus,Square);
После этого вызова значения! = Результат, поэтому источник не меняется