Подтвердить что ты не робот

Lambda\Anonymous Функция как параметр

Я очень новичок в С#. Просто играйте с ним. Не для реальной цели.

void makeOutput( int _param)
{
    Console.WriteLine( _param.ToString());
}

//... 
// Somewhere in a code
{
    makeOutput(     /* some not c# code for an example for what do I want */ function : int () { return 0; }     );
}

Можно ли использовать анонимные функции REAL (означает возврат результата)?

Я не хочу использовать делегатов, таких как

// Somewhere in a code
{
    Func<int> x = () => { return 0; };

    makeOutput( x())
}

Также я НЕ хочу изменять тип параметра метода, например

void makeOutput( Func<int> _param)
{
}

Это очень распространенное решение.


Все в порядке. Я просто понял, что мне нужны невозможные вещи. Я хотел объявить анонимную функцию и выполнить ее в том же месте. Примечание: DIRECT-объявление и DIRECT-вызов без общей оболочки.

// flash-like (as3) code    /// DOES NOT COMPILE
makeOutput(    (function : int(){ return 0; })()   );
4b9b3361

Ответ 1

Да.
Он назывался делегатом.

Делегаты являются (более или менее) нормальными типами; вы можете передать их таким же функциям, как и любой другой тип.

void makeOutput(Func<int> param) {
    Console.WriteLine(param());
}

makeOutput(delegate { return 4; });
makeOutput(() => { return 4; });
makeOutput(() => 4);

Ваш вопрос edit ed не имеет смысла.

С# - безопасный тип.
Если метод не хочет использовать функцию в качестве параметра, вы не можете дать ему метод в качестве параметра.

Ответ 2

void makeOutput(Func<int> _param)
{
    makeOutput(_param());
}

void makeOutput(int _param)
{
    Console.WriteLine( _param.ToString());
}

Это может сделать трюк!
Это просто: перегрузка!

Ответ 3

У меня была аналогичная проблема, и друг показал мне способ:

makeOutput((new Func<Int32>(() => { return 0; })).Invoke());

Надеюсь, это поможет