код с лямбда выражениями
using System;
class Program {
private static void WriteIf(int v, Func<int, bool> test) {
if (test(v)) {
Console.Write(v);
}
}
public static void Main(string[] args) {
WriteIf(7, t => t > 10);
WriteIf(4, t => t * 2 > 5);
WriteIf(9, x => !false);
}
}
и второй код
using System;
class Program {
private static void M<A, B, C>(A v, Func<A, B> f1, Func<B, C> f2){
Console.WriteLine(typeof(C));
}
public static void Main(string[] args) {
M(7.0, v => new[] { v }, v => v[0]);
}
}
Код:
using System;
calss Program
{
private static void WriteIf(int v, Func<int, bool> test)
{
if (test(v))
{
Console.Write(v);
}
}
public static void Main(string[] args)
{
WriteIf(7, t => t > 10);
WriteIf(4, t => t * 2 > 5);
WriteIf(9, x => !false);
}
}
и второй код
using System;
class Program
{
private static void M<A, B, C>(A v, Func<A, B> f1, Func<B, C> f2)
{
Console.WriteLine(typeof(C));
}
public static void Main(string[] args)
{
M(7.0, v => new[] { v }, v => v[0]);
}
}
calss Program
{
private static void WriteIf(int v, Func<int, bool> test)
{
if (test(v))
{
Console.Write(v);
}
}
public static void Main(string[] args)
{
WriteIf(7, t => t > 10);
WriteIf(4, t => t * 2 > 5);
WriteIf(9, x => !false);
}
}
и второй код
using System;
class Program
{
private static void M<A, B, C>(A v, Func<A, B> f1, Func<B, C> f2)
{
Console.WriteLine(typeof(C));
}
public static void Main(string[] args)
{
M(7.0, v => new[] { v }, v => v[0]);
}
}
Выражение Func<int, bool> test означает, что этот параметр принимает функцию с параметром типа int и выдает результат типа bool.
Выражение вроде "t => t > 10" обозначает функцию, что написана справа от знака "=>" с параметром, что написан слева от знака "=>".
Я не знаю глубинных дотнетовских процессов, знаю, что надо копать в сторону анонимных методов (кои здесь и используются). Я просто привык читать такие выражения так: "на вход поступает переменная, обозначим ее t, и сделаем с ней то, что написано справа: t > 10".
Ну а во второй программе уже какое-то извращение. Единственное, что мне не понятно, это что за запись такая: void M<A, B, C>. А в остальном этот пример можно читать также, как и предыдущий.