Predicate<T> Temsilci
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir ölçüt kümesini tanımlayan ve belirtilen nesnenin bu ölçütleri karşılayıp karşılamadığını belirleyen yöntemi temsil eder.
generic <typename T>
public delegate bool Predicate(T obj);
public delegate bool Predicate<in T>(T obj);
public delegate bool Predicate<T>(T obj);
type Predicate<'T> = delegate of 'T -> bool
Public Delegate Function Predicate(Of In T)(obj As T) As Boolean
Public Delegate Function Predicate(Of T)(obj As T) As Boolean
Tür Parametreleri
- T
Karşılaştıracak nesnenin türü.
Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.Parametreler
- obj
- T
Bu temsilci tarafından temsil edilen yöntem içinde tanımlanan ölçütlerle karşılaştırılan nesne.
Dönüş Değeri
true
bu temsilci tarafından temsil edilen yöntemde tanımlanan ölçütleri karşılıyorsa obj
; değilse, false
.
Örnekler
Aşağıdaki kod örneği, bir Predicate<T> yapı dizisini Array.Find Point aramak için yöntemiyle bir temsilci kullanır. Örnek, adlı predicate
bir Predicate<T> temsilciyi açıkça tanımlar ve ve Point.Y alanlarının ürünü Point.X 100.000'den büyükse döndüren true
adlı FindPoints
bir yöntem atar. İkinci örnekte gösterildiği gibi türündeki bir temsilciyi Predicate<T>açıkça tanımlamak yerine lambda ifadesi kullanmanın özel olduğunu unutmayın.
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
open System
open System.Drawing
let findPoints (obj: Point) =
obj.X * obj.Y > 100000
// Create an array of Point structures.
let points =
[| Point(100, 200)
Point(150, 250)
Point(250, 375)
Point(275, 395)
Point(295, 450) |]
// Define the Predicate<T> delegate.
let predicate = Predicate<Point> findPoints
// Find the first Point structure for which X times Y
// is greater than 100000.
let first = Array.Find(points, predicate)
// Display the first structure found.
printfn $"Found: X = {first.X}, Y = {first.Y}"
// The example displays the following output:
// Found: X = 275, Y = 395
Imports System.Drawing
Public Class Example
Public Shared Sub Main()
' Create an array of Point structures.
Dim points() As Point = { new Point(100, 200), new Point(150, 250),
new Point(250, 375), new Point(275, 395),
new Point(295, 450) }
' Define the Predicate(Of T) delegate.
Dim predicate As Predicate(Of Point) = AddressOf Example.FindPoints
' Find the first Point structure for which X times Y
' is greater than 100000.
Dim first As Point = Array.Find(points, predicate)
' Display the first structure found.
Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y)
End Sub
Private Shared Function FindPoints(obj As Point) As Boolean
Return obj.X * obj.Y > 100000
End Function
End Class
' The example displays the following output:
' Found: X = 275, Y = 395
Aşağıdaki örnek, temsilciyi temsil Predicate<T> etmek için lambda ifadesi kullanması dışında önceki örnekle aynıdır. dizinin her öğesi points
, ifade arama ölçütlerine uyan bir öğe bulana kadar lambda ifadesine geçirilir. Bu durumda, X ve Y alanlarının ürünü 100.000'den büyükse lambda ifadesi döndürür true
.
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
open System
open System.Drawing
// Create an array of Point structures.
let points =
[| Point(100, 200)
Point(150, 250)
Point(250, 375)
Point(275, 395)
Point(295, 450) |]
// Find the first Point structure for which X times Y
// is greater than 100000.
let first = Array.Find(points, fun x -> x.X * x.Y > 100000)
// Display the first structure found.
printfn $"Found: X = {first.X}, Y = {first.Y}"
// The example displays the following output:
// Found: X = 275, Y = 395
Imports System.Drawing
Public Class Example
Public Shared Sub Main()
' Create an array of Point structures.
Dim points() As Point = { 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.
Dim first As Point = Array.Find(points,
Function(x) x.X * x.Y > 100000 )
' Display the first structure found.
Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y)
End Sub
End Class
' The example displays the following output:
' Found: X = 275, Y = 395
Açıklamalar
Bu temsilci, koleksiyondaki Array öğeleri aramak için ve List<T> sınıflarının çeşitli yöntemleri tarafından kullanılır.
Genellikle, Predicate<T> temsilci bir lambda ifadesi ile temsil edilir. Lambda ifadesinde yerel olarak kapsamlı değişkenler kullanılabildiğinden, derleme zamanında tam olarak bilinmeyen bir koşulu test etmek kolaydır. Bu, bir Ulusal Hokey Ligi takımı ve kurulduğu yıl hakkında bilgi içeren bir HockeyTeam
sınıfı tanımlayan aşağıdaki örnekte simülasyonu yapılmıştır. Örnek, yılları temsil eden bir tamsayı değerleri dizisi tanımlar ve dizinin bir öğesini foundedBeforeYear
öğesine rastgele atar. Bu, örneğin Main
yöntemiyle yerel olarak kapsamı belirlenmiş bir değişkendir. Yerel olarak kapsamlı değişkenler bir lambda ifadesi için kullanılabilir olduğundan, yöntemine List<T>.FindAll geçirilen lambda ifadesi, o yıl veya öncesinde kurulan her takım için bir HockeyTeam
nesnesi döndürebilir.
using System;
using System.Collections.Generic;
public class HockeyTeam
{
private string _name;
private int _founded;
public HockeyTeam(string name, int year)
{
_name = name;
_founded = year;
}
public string Name {
get { return _name; }
}
public int Founded {
get { return _founded; }
}
}
public class Example
{
public static void Main()
{
Random rnd = new Random();
List<HockeyTeam> teams = new List<HockeyTeam>();
teams.AddRange( new HockeyTeam[] { new HockeyTeam("Detroit Red Wings", 1926),
new HockeyTeam("Chicago Blackhawks", 1926),
new HockeyTeam("San Jose Sharks", 1991),
new HockeyTeam("Montreal Canadiens", 1909),
new HockeyTeam("St. Louis Blues", 1967) } );
int[] years = { 1920, 1930, 1980, 2000 };
int foundedBeforeYear = years[rnd.Next(0, years.Length)];
Console.WriteLine("Teams founded before {0}:", foundedBeforeYear);
foreach (var team in teams.FindAll( x => x.Founded <= foundedBeforeYear))
Console.WriteLine("{0}: {1}", team.Name, team.Founded);
}
}
// The example displays output similar to the following:
// Teams founded before 1930:
// Detroit Red Wings: 1926
// Chicago Blackhawks: 1926
// Montreal Canadiens: 1909
open System
type HockeyTeam =
{ Name: string
Founded: int }
let rnd = Random()
let teams = ResizeArray()
teams.AddRange
[| { Name = "Detroit Red Wings"; Founded = 1926 }
{ Name = "Chicago Blackhawks"; Founded = 1926 }
{ Name = "San Jose Sharks"; Founded = 1991 }
{ Name = "Montreal Canadiens"; Founded = 1909 }
{ Name = "St. Louis Blues"; Founded = 1967 }|]
let years = [| 1920; 1930; 1980; 2000 |]
let foundedBeforeYear = years[rnd.Next(0, years.Length)]
printfn $"Teams founded before {foundedBeforeYear}:"
for team in teams.FindAll(fun x -> x.Founded <= foundedBeforeYear) do
printfn $"{team.Name}: {team.Founded}"
// The example displays output similar to the following:
// Teams founded before 1930:
// Detroit Red Wings: 1926
// Chicago Blackhawks: 1926
// Montreal Canadiens: 1909
Imports System.Collections.Generic
Public Class HockeyTeam
Private _name As String
Private _founded As Integer
Public Sub New(name As String, year As Integer)
_name = name
_founded = year
End Sub
Public ReadOnly Property Name As String
Get
Return _name
End Get
End Property
Public ReadOnly Property Founded As Integer
Get
Return _founded
End Get
End Property
End Class
Module Example
Public Sub Main()
Dim rnd As New Random()
Dim teams As New List(Of HockeyTeam)()
teams.AddRange( { new HockeyTeam("Detroit Red Wings", 1926),
new HockeyTeam("Chicago Blackhawks", 1926),
new HockeyTeam("San Jose Sharks", 1991),
new HockeyTeam("Montreal Canadiens", 1909),
new HockeyTeam("St. Louis Blues", 1967) } )
Dim years() As Integer = { 1920, 1930, 1980, 2000 }
Dim foundedBeforeYear As Integer = years(rnd.Next(0, years.Length))
Console.WriteLine("Teams founded before {0}:", foundedBeforeYear)
For Each team in teams.FindAll( Function(x) x.Founded <= foundedBeforeYear )
Console.WriteLine("{0}: {1}", team.Name, team.Founded)
Next
End Sub
End Module
' The example displays output similar to the following:
' Teams founded before 1930:
' Detroit Red Wings: 1926
' Chicago Blackhawks: 1926
' Montreal Canadiens: 1909
Uzantı Metotları
GetMethodInfo(Delegate) |
Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır. |