В приведенном ниже примере показано, что для оценки условия с жестко заданным значением 100000 используется predicate
. Невозможно добавить дополнительные параметры к методу FindPoints
, поскольку это нарушило бы ограничение параметра предиката.
Это ставит под сомнение ценность использования предикатов. Очевидно, Lambda решает эту проблему ... но, тем не менее, может ли кто-нибудь уточнить полезность предикатов в реальных сценариях, учитывая это, казалось бы, странное ограничение.
Зачем кому-то использовать предикаты, если они не принимают других параметров, кроме T?
using System;
using System.Drawing;
public class Example
{
public static void Main()
{
// Create an array of Point structures.
Point[] points = { new Point(100, 200),
new Point(150, 250), new Point(250, 375),
new Point(275, 395), new Point(295, 450) };
// Define the Predicate<T> delegate.
Predicate<Point> predicate = FindPoints;
// Find the first Point structure for which X times Y
// is greater than 100000.
Point first = Array.Find(points, predicate);
// Display the first structure found.
Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
}
private static bool FindPoints(Point obj)
{
return obj.X * obj.Y > 100000;
}
}
// The example displays the following output:
// Found: X = 275, Y = 395
РЕДАКТИРОВАТЬ: использование Lambda для того же, ниже.
using System;
using System.Drawing;
public class Example
{
public static void Main()
{
// Create an array of Point structures.
Point[] points = { new Point(100, 200),
new Point(150, 250), new Point(250, 375),
new Point(275, 395), new Point(295, 450) };
// Find the first Point structure for which X times Y
// is greater than 100000.
Point first = Array.Find(points, x => x.X * x.Y > 100000 );
// Display the first structure found.
Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
}
}
// The example displays the following output:
// Found: X = 275, Y = 395
Это из MSDN. В статье приводятся хорошие примеры, но, похоже, я не отвечаю на мой вопрос.