Главная страница » C# » 44. Предикаты
Предикат — это функция, которая принимает один или несколько аргументов и возвращает true
или false
. В C# предикаты часто используются для фильтрации данных, проверки условий и работы с коллекциями.
В C# предикат можно представить:
bool
-метод)Predicate<T>
Пример предиката:
bool IsEven(int number)
{
return number % 2 == 0;
}
Вызов:
Console.WriteLine(IsEven(4)); // true
Console.WriteLine(IsEven(7)); // false
Predicate<T>
C# предоставляет встроенный делегат Predicate<T>
, который представляет метод, принимающий один аргумент типа T
и возвращающий bool
.
Пример:
Predicate isEven = num => num % 2 == 0;
Console.WriteLine(isEven(10)); // true
Console.WriteLine(isEven(11)); // false
Фактически, Predicate<T>
— это сокращение для Func<T, bool>
.
Методы коллекций, такие как List<T>.Find
, FindAll
, Exists
, принимают предикаты.
Пример:
List numbers = new List { 1, 2, 3, 4, 5, 6 };
// Найти первое четное число
int evenNumber = numbers.Find(num => num % 2 == 0);
Console.WriteLine(evenNumber); // 2
// Найти все четные числа
List evenNumbers = numbers.FindAll(num => num % 2 == 0);
Console.WriteLine(string.Join(", ", evenNumbers)); // 2, 4, 6
// Проверить, есть ли числа больше 4
bool hasLargeNumbers = numbers.Exists(num => num > 4);
Console.WriteLine(hasLargeNumbers); // true
Можно передавать предикаты как параметры методов.
Пример:
bool CheckNumber(int number, Predicate condition)
{
return condition(number);
}
bool isPositive = CheckNumber(10, num => num > 0);
Console.WriteLine(isPositive); // true
В LINQ предикаты применяются в методах Where
, Any
, All
и других.
Пример:
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(num => num % 2 == 0);
Console.WriteLine(string.Join(", ", evenNumbers)); // 2, 4
bool allPositive = numbers.All(num => num > 0);
Console.WriteLine(allPositive); // true
}
}
true
или false
и используются для проверки условий.Predicate<T>
— встроенный делегат C# для предикатов.List<T>
и LINQ (Where
, Any
, All
).Напишите программу, которая:
Пример решения:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List numbers = new List { 5, 12, 8, 20, 3, 15 };
Predicate isGreaterThanTen = num => num > 10;
List filteredNumbers = numbers.FindAll(isGreaterThanTen);
Console.WriteLine("Числа больше 10: " + string.Join(", ", filteredNumbers));
}
}
Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024-2025 Все права защищены. CodeFor.