Здравствуйте, Sinclair, Вы писали:
S>Вот простой пример:
S>S>public static bool IsEven(int i) => { i % 2 == 0;}
S>....
S>var even = from n in numbers where IsEven(n) select n;
S>
S>Здесь мы определили функцию по имени IsEven. Её сигнатура — Func<int, bool>. Её тело — {return i % 2 == 0;}.
Исключительно занудства ради, с целью лишь бы придраться:
1) Сигнатура функции (т.е. имя и список типов параметров) — IsEven(int)
2) Func<int, bool> — это тип делегата, к которому будет приведён "method group" IsEven в месте его использования.
Здравствуйте, nt2000, Вы писали:
N>анон.ф-ия === ф-ия без заголовка === только тело ф-ии === кусок кода
N>Раз анон.ф-ия есть ф-ия без заголовка то есть только тело ф-ии читай кусок кода
N>тогда почему бы не "..передать как параметр в другую функцию.." просто кусок кода?
А как предлагаешь в такую функцию передавать кусок кода?:
static void Func(Action a)
{
a();
}
Func( Console.WriteLine("1"); Console.WriteLine("2"); ); //Так были бы проблемы, противоречия в синтаксисе.
Func( {Console.WriteLine("1"); Console.WriteLine("2");} ); //Так тоже были бы проблемы, скорее всего.
//Сейчас можно только так сделать:
Func( delegate{Console.WriteLine("1"); Console.WriteLine("2");} );
Func( delegate(){Console.WriteLine("1"); Console.WriteLine("2");} );
Func( () => {Console.WriteLine("1"); Console.WriteLine("2");} );
Это и так зоопарк. ИМХО, лучше только один вариант использовать () =>
N>Или всё же это не ф-ия без заголовка, а нечто другое? чё скрываете?! давай-те уже колитесь..
Компилятор ее превращает в обычную функцию, дает ей свое корявое имя, чтобы не совпало с твоими функциями.
Код в другую функцию никогда не передается(как бы это в тексте программы ни выглядело), передаются только указатели на функции.
Теоретически есть возможность передать в функцию именно код, в виде теста программы или уже откомпилированный и исполнить.
Но если только начал изучать C# то считай — это радикальные хакерские трюки, с большими накладными расходами, и сам C# их не поддерживает.