Справочная информация: я пытаюсь написать максимально короткое лямбда-выражение, чтобы найти наибольшее из 3 чисел.
Конечно, оператор тернери способен это сделать.
Func<int, int, int, int> greatestNumber2 = (x, y, z) => (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
Но я намерен добиться такой функции, как та, что ниже.
greatest (x, y, z) = if (greater (x, y)>z) then greater(x, y) else z;
Мне удалось сделать это двумя способами.
Func<int, int, int> greaterNumber = null;
Func<int, int, int, int> greatestNumber = null;
//Expression 1
greaterNumber = (x, y) => x > y ? x : y;
greatestNumber = (x, y, z) => greaterNumber(x, y) > z ? greaterNumber(x, y) : z;
//Expression 2
greatestNumber = (x, y, z) => {
Func<int, int, int> greater = (i, j) => i > j ? i : j;
return greater(x, y) > z ? greater(x, y) : z;
};
В Выражении 2 я смог каким-то образом достичь того, чего хотел, то есть определить функцию, чтобы найти большее из двух чисел из одного и того же выражения. Тем не менее, это устав лямбда.
Есть ли способ написать одну лямбду с подкладкой, чтобы определить и использовать большее из двух чисел из выражения самого великого.