Лямбда-вирази =>
Як делегат, але простіше
delegate int Operation(int x, int y);
static void Main(string[] args)
{
Operation operation = (x, y) => x + y; // створює метод в коді
Console.WriteLine(operation(10, 20)); // 30
Console.WriteLine(operation(40, 20)); // 60
Console.Read();
}
// (x, y) => { Console.WriteLine("z = "); int z = x + y; return z; };
Спрощує написання методів
static void Show(string[] arr) => Console.WriteLine(string.Join(", ", arr));
static string Show() => "Hello Ukraine";
Підключає подію (+=) прямо в коді, без створення методу
private void Window_Loaded(object sender, RoutedEventArgs e)
{
button.Click += (s, a) =>
{
MessageBox.Show("Work");
};
}
// b1.MouseEnter
// b1.MouseLeave
Асинхронно (затримка 1с)
button.Click += async (s, a) =>
{
await Task.Delay(1000);
MessageBox.Show("Work");
};
Для 4 кнопок
Button[] b = { b1, b2, b3, b4 };
foreach (Button item in b)
{
item.Click += (s, a) =>
{
MessageBox.Show("Work");
};
}
Пошук в об'єктах
Pet[] pets = {
new Pet { Name="Андрій", Successful=true },
new Pet { Name="Дмитро", Successful=true },
new Pet { Name="Віктор", Successful=false }
};
try {
int numberSuccessful = pets.Count(p => p.Successful == true);
Console.WriteLine("There are {0} unvaccinated animals.", numberSuccessful);
}
catch (OverflowException)
{
Console.WriteLine("Число більше за Int32");
Console.WriteLine("Спробуйте метод LongCount()"); }
}
------------
class Pet {
public string Name { get; set; }
public bool Successful { get; set; }
}
Пошук в списку
static void Main(string[] args)
{
IList<Student> studentList = new List<Student>() {
new Student() { StudentID = 1, StudentName = "John", Age = 18, StandardID = 1 } ,
new Student() { StudentID = 2, StudentName = "Steve", Age = 21, StandardID = 1 } ,
new Student() { StudentID = 3, StudentName = "Bill", Age = 18, StandardID = 2 } ,
new Student() { StudentID = 4, StudentName = "Ram", Age = 20, StandardID = 2 } ,
new Student() { StudentID = 5, StudentName = "Ron", Age = 21 }
};
var studentNames = studentList.Where(s => s.Age > 18)
.Select(s => s)
.Where(st => st.StandardID > 0)
.Select(s => s.StudentName);
foreach(var name in studentNames)
{
Console.WriteLine(name);
}
Console.ReadKey();
}
------------
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
public int StandardID { get; set; }
}
Прибирання дублікатів (не дуже ефективне, в порівнянні зі звичайним циклом)
var query = from p in Process.GetProcesses()
join mo in results.Cast<ManagementObject>() on p.Id equals (int)(uint)mo["ProcessId"]
select new { Process = p, Path = (string)mo["ExecutablePath"] };
var uniquePaths = query.GroupBy(item => item.Path).Select(item => item.First());
Масив Func
Func<double, double>[] arrLiamda = { x => Math.Sqrt(Math.Abs(x)),
x => x * x * x,
x => ++x };