2015-04-20 2 views
0

Я использую этот код для построения моего 3D-графика поверхности в каждой точке, но у меня есть проблема, связанная с параметризацией моей функции, поэтому переменная t будет зациклирована от 0 до значения T, но Я не могу понять, как это сделать внутри делегата?C# lambda expression with for loop

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

/*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; 
+9

Я думаю, вы должны пойти на запутанный конкурс кода на C# ... Это три минуты, когда я читаю первый блок кода, и я до сих пор не уверен, кто является параметром того, кто – xanatos

ответ

0

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

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; 
}; 

Обратите внимание, что мне пришлось изменить сумматор for

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

new ILSurface(func); 

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