C# лямбда-выражение для цикла for

Я использую этот код для построения своего трехмерного графика поверхности в каждой точке, но у меня есть проблема, что мне нужно параметризовать мою функцию, чтобы переменная t была зациклена от 0 до значения T, но я не могу понять, как можно Я делаю это внутри делегата?

отредактировал первый блок для большей наглядности:

/*this is code for building 3d surface plot, parameter delegate is counting Z
  value in each (x, y) point.
  x, y are axis variables. t is constant here*/
new ILPlotCube()
{ 
    new ILSurface((x, y) => (float) (1/(x+y+t))
}

Результирующий псевдокод выглядит примерно так:

float functionValue = 0;
for (double t = 0; t < T; t + deltaT)
{
     /*t is loop parameter here*/
     functionValue += (float) (1/(x+y+t));   
}
return functionValue;

1 ответ

Если вам не нужно дерево выражений, тогда оно должно быть:

Func<float, float, float> func = (x, y) =>
{
    float functionValue = 0;
    for (double t = 0; t < T; t += deltaT)
    {
        /*t is loop parameter here*/
        functionValue += (float)(1 / (x + y + t));
    }
    return functionValue;
};

Обратите внимание, что я должен был изменить t + deltaT сумматор for

Оттуда вы можете

new ILSurface(func);

Это statement lambdaпотому что он использует { ... } код после =>, См. https://msdn.microsoft.com/library/bb397687.aspx statement lambdas

Другие вопросы по тегам