Лямбда-выражение — это сокращенный способ объявления простого анонимного метода
public class LambdaTest
{
static void Main() {
Func<int, double> expr = x => x / 2;
int someNumber = 9;
Console.WriteLine( "Результат: {0}", expr(someNumber) );
}
Func<int, int> expr = (x) =>
{
x = x * 10;
MessageBox.Show(x.ToString());
return x;
};
expr(1000);
Одиночные лямбда-выражения
параметр => выражение
(список_параметров) => выражение
Для такого лямбда-выражения характерны расширенные возможности выполнения различных операций, поскольку в его теле допускается указывать несколько операторов.
namespace ConsoleApplication1
{
// Создадим несколько делегатов имитирующих
// простейшую форму регистрации
delegate int LengthLogin (string s);
delegate bool BoolPassword (string s1, string s2);
delegate void Captha (string s1, string s2);
class Program
{
static void Main()
{
link1:
Console.Write("Введите логин: ");
string login = Console.ReadLine();
// Используем лямбда-выражение
LengthLogin ll = ss => ss.Length;
int longlogin = ll(login);
if (longlogin >= 25)
{
Console.WriteLine("Слишком длинное имя\n");
goto link1;
}
Console.Write("Введите пароль: ");
string password1 = Console.ReadLine();
Console.Write("Повторите пароль: ");
string password2 = Console.ReadLine();
// Используем лямбда выражение
BoolPassword bp = (s1, s2) => s1 == s2;
if (bp(password1, password2))
{
Random ran = new Random();
string resCaptha = "";
for (int i = 0; i < 10; i++)
resCaptha += (char)ran.Next(0, 100);
Console.WriteLine("Введите код xD: "+resCaptha);
string resCode = Console.ReadLine();
// Реализуем блочное лямбда-выражение
Captha cp = (s1,s2) =>
{
if (s1 == s2)
Console.WriteLine("Регистрация удалась!");
else
Console.WriteLine("Не переживай, в следующий раз получится :)");
return;
};
cp(resCaptha, resCode);
}
else
Console.WriteLine("Регистрация провалилась. Пароли не совпадают");
Console.ReadLine();
}
}
}
public class LambdaTest
{
static void Main() {
Func<int, double> expr = x => x / 2;
int someNumber = 9;
Console.WriteLine( "Результат: {0}", expr(someNumber) );
}
Func<int, int> expr = (x) =>
{
x = x * 10;
MessageBox.Show(x.ToString());
return x;
};
expr(1000);
Одиночные лямбда-выражения
параметр => выражение
(список_параметров) => выражение
(x, y) => x * yБлочные лямбда-выражения
Для такого лямбда-выражения характерны расширенные возможности выполнения различных операций, поскольку в его теле допускается указывать несколько операторов.
(x, y) => { return x * y; }
using System;namespace ConsoleApplication1
{
// Создадим несколько делегатов имитирующих
// простейшую форму регистрации
delegate int LengthLogin (string s);
delegate bool BoolPassword (string s1, string s2);
delegate void Captha (string s1, string s2);
class Program
{
static void Main()
{
link1:
Console.Write("Введите логин: ");
string login = Console.ReadLine();
// Используем лямбда-выражение
LengthLogin ll = ss => ss.Length;
int longlogin = ll(login);
if (longlogin >= 25)
{
Console.WriteLine("Слишком длинное имя\n");
goto link1;
}
Console.Write("Введите пароль: ");
string password1 = Console.ReadLine();
Console.Write("Повторите пароль: ");
string password2 = Console.ReadLine();
// Используем лямбда выражение
BoolPassword bp = (s1, s2) => s1 == s2;
if (bp(password1, password2))
{
Random ran = new Random();
string resCaptha = "";
for (int i = 0; i < 10; i++)
resCaptha += (char)ran.Next(0, 100);
Console.WriteLine("Введите код xD: "+resCaptha);
string resCode = Console.ReadLine();
// Реализуем блочное лямбда-выражение
Captha cp = (s1,s2) =>
{
if (s1 == s2)
Console.WriteLine("Регистрация удалась!");
else
Console.WriteLine("Не переживай, в следующий раз получится :)");
return;
};
cp(resCaptha, resCode);
}
else
Console.WriteLine("Регистрация провалилась. Пароли не совпадают");
Console.ReadLine();
}
}
}
using System; using System.Linq; using System.Collections.Generic; public class LambdaTest { static void Main() { var teamMembers = new List<string> { "Lou Loomis", "Smoke Porterhouse", "Danny Noonan", "Ty Webb" }; FindByFirstName( teamMembers, "Danny", (x, y) => x.Contains(y) ); } static void FindByFirstName( List<string> members, string firstName, Func<string, string, bool> predicate ) { foreach( var member in members ) { if( predicate(member, firstName) ) { Console.WriteLine( member ); } } } } using System; using System.Linq; using System.Linq.Expressions; public class EntryPoint { static void Main() { Expression<Func<int, int>> expr = n => n+1; Func<int, int> func = expr.Compile(); for( int i = 0; i < 10; ++i ) { Console.WriteLine( func(i) ); } } } Замыкания в C# 2.0
using System;
public class LambdaTest
{
static void Main() {
int counter = 0;
WriteStream( delegate () {
return counter++;
} );
Console.WriteLine( "Финальное значение счетчика: {0}",
counter );
}
static void WriteStream( Func<int> counter ) {
for( int i = 0; i < 10; ++i ) {
Console.Write( "{0}, ", counter() );
}
Console.WriteLine();
}
|
Комментариев нет:
Отправить комментарий