Predicate<T>委托在.NET類類庫中經常出現,此委托的定義如下:
public delegatebool Predicate<T>(T obj);
從其定義可以看到,此委托引用一個返回bool 值的方法,在實際開發中,通常使用Predicate<T>委托變量引用一個“判斷條件函數”,在判斷條件函數內部書寫代碼表明
函數參數所引用的對象應滿足的條件,條件滿足時,函數返回true.
在類庫中,List<T> 里面的 Find方法, 定義如下:
public T Find(Predicate<T> match);
那么我們可以在外部定義一個查找的規則方法。見以下示例代碼:
namespace UsePredicateDelegate
{
class MyClass
{
public int Value;
public string Information;
}
class Program
{
/// <summary>
/// 創建一個MyClass類型的對象集合
/// </summary>
/// <returns></returns>
private static List<MyClass> GetMyClassList()
{
List<MyClass> lst = new List<MyClass>();
Random ran = new Random();
MyClass obj = null;
for (int i = 0; i < 10; i++)
{
obj = new MyClass { Value = ran.Next(1, 100), Information = "object" + i.ToString() };
lst.Add(obj);
}
return lst;
}
/// <summary>
/// 打印一個MyClass對象集合的所有成員
/// </summary>
/// <param name="lst"></param>
private static void PrintList(List<MyClass> lst)
{
if (lst == null)
return;
foreach (MyClass obj in lst)
Console.WriteLine("Infomation={0},Value={1}", obj.Information, obj.Value);
}
static bool GreaterThan50(MyClass elem)
{
if (elem.Value > 50)
return true;
return false;
}
static void Main(string[] args)
{
Predicate<MyClass> pred = GreaterThan50;
List<MyClass> lst = GetMyClassList();
Console.WriteLine("生成的MyClass對象集合為:");
PrintList(lst);
MyClass foundElement= lst.Find(pred);
if (foundElement != null)
Console.WriteLine("找到了符合條件的對象。Infomation={0},Value={1}", foundElement.Information, foundElement.Value);
else
Console.WriteLine("未找到符合條件的對象");
Console.ReadKey();
}
}
}