Czy możesz mi wyjaśnić:
- Co to jest delegat predykatu?
- Gdzie powinniśmy stosować predykaty?
- Jakieś najlepsze praktyki korzystania z predykatów?
Doceniamy opisowy kod źródłowy.
Predykat to funkcja zwracająca true
lub false
. Delegat predykatu jest odniesieniem do predykatu.
Tak więc w zasadzie delegat predykatu jest odwołaniem do funkcji, która zwraca true
lub false
. Predykaty są bardzo przydatne do filtrowania listy wartości - oto przykład.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
Predicate<int> predicate = new Predicate<int>(greaterThanTwo);
List<int> newList = list.FindAll(predicate);
}
static bool greaterThanTwo(int arg)
{
return arg > 2;
}
}
Teraz, jeśli używasz C # 3, możesz użyć lambda do reprezentowania predykatu w czystszy sposób:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
List<int> newList = list.FindAll(i => i > 2);
}
}
yeild return
zamiast tego? Lub jak to działa, jak iteruje się po całej liście?greaterThanTwo
sięreturn
nie stało,yield return
ponieważ jest toFindAll
metoda, która obsługuje sekwencję za Ciebie.i > val
zamiast tegoi > 2
, gdzieval
wartość jest wprowadzana przez użytkownika.Przechodząc od odpowiedzi Andrzeja w odniesieniu do c # 2 i c # 3 ... możesz także zrobić je w linii dla jednorazowej funkcji wyszukiwania (patrz poniżej).
Mam nadzieję że to pomoże.
źródło
Po prostu delegat, który zwraca wartość logiczną. Jest często używany na listach filtrujących, ale można go używać gdziekolwiek chcesz.
źródło
Jest to dobry artykuł na orzeczników tutaj , choć to z czasów .NET2, więc tam nie ma wzmianki o wyrażeniach lambda tam.
źródło
Co to jest Predicate Delegate?
1) Predicate to funkcja zwracająca wartość true lub false. Ta koncepcja pojawiła się w .NET 2.0. 2) Jest używany z wyrażeniem lambda (=>). Jako argument przyjmuje typ ogólny. 3) Umożliwia zdefiniowanie funkcji predykatu i przekazanie jej jako parametru do innej funkcji. 4) Jest to szczególny przypadek a
Func
, ponieważ wymaga tylko jednego parametru i zawsze zwraca wartość bool.W przestrzeni nazw C #:
Jest zdefiniowany w przestrzeni nazw Systemu.
Gdzie powinniśmy skorzystać z Predicate Delegate?
Powinniśmy użyć Predicate Delegate w następujących przypadkach:
1) Do wyszukiwania przedmiotów w ogólnej kolekcji. na przykład
2) Podstawowy przykład, który skraca kod i zwraca true lub false:
teraz zadzwoń powyżej predykatu:
3) Anonimową metodę można również przypisać do typu delegata predykatu, jak poniżej:
Jakieś najlepsze praktyki dotyczące predykatów?
Używaj Func, wyrażeń lambda i delegatów zamiast predykatów.
źródło
Metody wyszukiwania oparte na predykatach pozwalają delegatowi metody lub wyrażeniu lambda zdecydować, czy dany element jest „dopasowany”. Predykat to po prostu delegat akceptujący obiekt i zwracający wartość true lub false: public delegate bool Predicate (obiekt T);
źródło
Jeśli korzystasz z VB 9 (VS2008), predykat może być złożoną funkcją:
Możesz też napisać orzeczenie jako lambda, o ile jest to tylko jedno wyrażenie:
źródło
Predykat należy do kategorii ogólnych delegatów w języku C #. Jest to wywoływane z jednym argumentem i zawsze zwraca wartość logiczną. Zasadniczo predykat służy do testowania warunku - prawda / fałsz. Wiele klas obsługuje predykaty jako argument. Na przykład list.findall oczekuje predykatu parametru. Oto przykład predykatu.
Wyobraź sobie wskaźnik funkcji z podpisem -
bool delegate myDelegate (dopasowanie T);
Oto przykład
Node.cs
Główna klasa -
źródło
Po prostu -> podają wartości Prawda / Fałsz w oparciu o warunki najczęściej używane w zapytaniach. używane głównie z delegatami
rozważ przykład listy
zawiera nazwiska i wiek. Teraz powiedzmy, że chcemy znaleźć nazwiska pod warunkiem Więc użyję,
próbowałem zachować prostotę!
źródło
Delegat definiuje typ odwołania, którego można użyć do enkapsulacji metody o określonej sygnaturze. C # delegata Cykl życia: Cykl życia C # delegata to
dowiedz się więcej formularz http://asp-net-by-parijat.blogspot.in/2015/08/what-is-delegates-in-c-how-to-declare.html
źródło