Bisakah Anda jelaskan kepada saya:
- Apa yang dimaksud dengan Delegasi Predikat?
- Di mana kita harus menggunakan predikat?
- Adakah praktik terbaik saat menggunakan predikat?
Kode sumber deskriptif akan dihargai.
Predikat adalah fungsi yang mengembalikan true
atau false
. Delegasi predikat adalah referensi ke predikat.
Jadi pada dasarnya delegasi predikat adalah referensi ke fungsi yang mengembalikan true
atau false
. Predikat sangat berguna untuk memfilter daftar nilai - ini adalah contohnya.
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;
}
}
Sekarang jika Anda menggunakan C # 3 Anda dapat menggunakan lambda untuk mewakili predikat dengan cara yang lebih bersih:
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
? Atau bagaimana cara kerjanya, bagaimana cara mengulangi seluruh daftar?greaterThanTwo
memilikireturn
tidakyield return
karena merupakanFindAll
metode yang menangani urutan untuk Anda.i > val
, alih-alihi > 2
, di manaval
nilai dimasukkan oleh pengguna.Memimpin dari jawaban Andrew terkait dengan c # 2 dan c # 3 ... Anda juga dapat melakukannya sebaris untuk fungsi pencarian satu kali (lihat di bawah).
Semoga ini membantu.
sumber
Hanya seorang delegasi yang mengembalikan boolean. Ini banyak digunakan dalam daftar pemfilteran tetapi dapat digunakan di mana pun Anda inginkan.
sumber
Ada artikel bagus tentang predikat di sini , meskipun berasal dari era .NET2, jadi tidak disebutkan ekspresi lambda di sana.
sumber
Apa itu Predikat Delegasi?
1) Predikat adalah fitur yang mengembalikan benar atau salah. Konsep ini telah masuk dalam kerangka .net 2.0. 2) Ini digunakan dengan ekspresi lambda (=>). Dibutuhkan tipe generik sebagai argumen. 3) Ini memungkinkan fungsi predikat untuk didefinisikan dan diteruskan sebagai parameter ke fungsi lain. 4) Ini adalah kasus khusus dari a
Func
, karena hanya membutuhkan satu parameter dan selalu mengembalikan bool.Di C # namespace:
Ini didefinisikan dalam System namespace.
Di mana kita harus menggunakan Delicate Predicate?
Kami harus menggunakan Predicate Delegate dalam kasus berikut:
1) Untuk mencari item dalam koleksi generik. misalnya
2) Contoh dasar yang memperpendek kode dan mengembalikan benar atau salah:
sekarang, Panggil predikat di atas:
3) Metode anonim juga dapat ditugaskan untuk jenis delegasi Predikat seperti di bawah ini:
Adakah praktik terbaik tentang predikat?
Gunakan Func, Ekspresi Lambda, dan Delegasi alih-alih Predikat.
sumber
Metode pencarian berbasis predikat memungkinkan delegasi metode atau ekspresi lambda untuk memutuskan apakah elemen yang diberikan adalah "cocok." Predikat hanyalah delegasi yang menerima objek dan mengembalikan benar atau salah: public delegate bool Predicate (objek T);
sumber
Jika Anda berada di VB 9 (VS2008), predikat dapat menjadi fungsi yang kompleks:
Atau Anda dapat menulis predikat sebagai lambda, asalkan hanya satu ungkapan:
sumber
Predikat berada di bawah kategori delegasi umum di C #. Ini disebut dengan satu argumen dan selalu mengembalikan tipe boolean. Pada dasarnya, predikat digunakan untuk menguji kondisi - benar / salah. Banyak kelas mendukung predikat sebagai argumen. Untuk eg, list.findall mengharapkan predikat parameter. Berikut adalah contoh predikatnya.
Bayangkan sebuah pointer fungsi dengan tanda tangan -
delegasi bool myDelegate (pertandingan T);
Inilah contohnya
Node.cs
Kelas utama -
sumber
Cukup -> mereka memberikan nilai Benar / Salah berdasarkan kondisi yang sebagian besar digunakan untuk kueri. kebanyakan digunakan dengan delegasi
pertimbangkan contoh daftar
berisi nama dan umur. Sekarang katakan kita ingin mencari nama dengan syarat Jadi saya akan gunakan,
mencoba Keep it Simple!
sumber
Delegasi mendefinisikan jenis referensi yang dapat digunakan untuk merangkum metode dengan tanda tangan tertentu. C # delegate Life cycle: Siklus hidup delegasi C # adalah
pelajari lebih lanjut formulir http://asp-net-by-parijat.blogspot.in/2015/08/what-is-delegates-in-c-how-to-declare.html
sumber