msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
作者:周公
日期:2007-12-28(没办法,去年写好的文章,因为csdn的博客不行,拖到今年发了
首发地址:http://blog.csdn.net/zhoufoxcn
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///大类别
///</summary>
publicclassCatalogInfo
{
privateintcatalogId;
privatestringcatalogName;
publicstringCatalogName
{
get{returncatalogName;}
set{catalogName=value;}
}
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicCatalogInfo(intcatalogId,stringcatalogName)
{
this.catalogId=catalogId;
this.catalogName=catalogName;
}
}
}
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///大类别
///</summary>
publicclassCatalogInfo
{
privateintcatalogId;
privatestringcatalogName;
publicstringCatalogName
{
get{returncatalogName;}
set{catalogName=value;}
}
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicCatalogInfo(intcatalogId,stringcatalogName)
{
this.catalogId=catalogId;
this.catalogName=catalogName;
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///查找符合特定条件的CatalogInfo类
///</summary>
publicclassCatalogFinder
{
privateintcatalogId;
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicCatalogFinder()
{
}
publicCatalogFinder(intcatalogId)
{
this.catalogId=catalogId;
}
///<summary>
///符合Predicate>T<match的方法
///</summary>
///<paramname="info"></param>
///<returns></returns>
publicboolFindByCatalogId(CatalogInfoinfo)
{
returninfo.CatalogId==catalogId;
}
}
}
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///查找符合特定条件的CatalogInfo类
///</summary>
publicclassCatalogFinder
{
privateintcatalogId;
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicCatalogFinder()
{
}
publicCatalogFinder(intcatalogId)
{
this.catalogId=catalogId;
}
///<summary>
///符合Predicate>T<match的方法
///</summary>
///<paramname="info"></param>
///<returns></returns>
publicboolFindByCatalogId(CatalogInfoinfo)
{
returninfo.CatalogId==catalogId;
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///小类别
///</summary>
publicclassBoardInfo
{
privateintboardId;
privatestringboardName;
privateintcatalogId;
///<summary>
///所在大类别编号
///</summary>
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicstringBoardName
{
get{returnboardName;}
set{boardName=value;}
}
publicintBoardId
{
get{returnboardId;}
set{boardId=value;}
}
publicBoardInfo(intboardId,stringboardName,intcatalogId)
{
this.boardId=boardId;
this.boardName=boardName;
this.catalogId=catalogId;
}
}
}
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///小类别
///</summary>
publicclassBoardInfo
{
privateintboardId;
privatestringboardName;
privateintcatalogId;
///<summary>
///所在大类别编号
///</summary>
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}
publicstringBoardName
{
get{returnboardName;}
set{boardName=value;}
}
publicintBoardId
{
get{returnboardId;}
set{boardId=value;}
}
publicBoardInfo(intboardId,stringboardName,intcatalogId)
{
this.boardId=boardId;
this.boardName=boardName;
this.catalogId=catalogId;
}
}
}
上面分别是两个范型集合中用到的实体,以及将来要用于查找这些实体的辅助类,下面距离说明用法:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Drawing.Imaging;
usingListDemo;
///<summary>
///说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
///msdn里描述如下:Predicate委托,用于定义要搜索的元素应满足的条件。
///这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
///一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate委托只能使用
///一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
///作者:周公
///日期:2007-12-28
///首发地址:http://blog.csdn.net/zhoufoxcn
///</summary>
publicclassExample
{
publicstaticvoidMain()
{
//初始化大类别集合
List<CatalogInfo>catalogList=newList<CatalogInfo>(10);
for(inti=0;i<10;i++)
{
catalogList.Add(newCatalogInfo(i,"大类别"+i));
}
//初始化小类别集合,随机指定它们的大类别编号
List<BoardInfo>boardList=newList<BoardInfo>(50);
Randomrandom=newRandom(100);
for(inti=0;i<100;i++)
{
boardList.Add(newBoardInfo(i,"小类别"+i,random.Next()%10));
}
Console.WriteLine("=======在大类别中查找========");
CatalogFindercatalogFinder=newCatalogFinder(5);
CatalogInfocatalogInfo=catalogList.Find(catalogFinder.FindByCatalogId);
Console.WriteLine("该大类别的名称:"+catalogInfo.CatalogName);
Console.WriteLine("=======在小类别中查找========");
BoardFinderboardFinder=newBoardFinder();
boardFinder.BoardId=25;
BoardInfoboardInfo=boardList.Find(boardFinder.FindByBoardId);
Console.WriteLine("该小类别信息:小类别名称{0},所属大类别编号{1}",boardInfo.BoardName,boardInfo.CatalogId);
Console.WriteLine("=======在小类别中按大类别编号查找========");
boardFinder.CatalogId=9;
List<BoardInfo>boardInfoList=boardList.FindAll(boardFinder.FindByCatalogId);
foreach(BoardInfoinfoinboardInfoList)
{
Console.WriteLine("该小类别信息:小类别名称{0},所属大类别编号{1}",info.BoardName,info.CatalogId);
}
Console.ReadLine();
}
}
usingSystem.Collections.Generic;
usingSystem.Drawing.Imaging;
usingListDemo;
///<summary>
///说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
///msdn里描述如下:Predicate委托,用于定义要搜索的元素应满足的条件。
///这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
///一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate委托只能使用
///一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
///作者:周公
///日期:2007-12-28
///首发地址:http://blog.csdn.net/zhoufoxcn
///</summary>
publicclassExample
{
publicstaticvoidMain()
{
//初始化大类别集合
List<CatalogInfo>catalogList=newList<CatalogInfo>(10);
for(inti=0;i<10;i++)
{
catalogList.Add(newCatalogInfo(i,"大类别"+i));
}
//初始化小类别集合,随机指定它们的大类别编号
List<BoardInfo>boardList=newList<BoardInfo>(50);
Randomrandom=newRandom(100);
for(inti=0;i<100;i++)
{
boardList.Add(newBoardInfo(i,"小类别"+i,random.Next()%10));
}
Console.WriteLine("=======在大类别中查找========");
CatalogFindercatalogFinder=newCatalogFinder(5);
CatalogInfocatalogInfo=catalogList.Find(catalogFinder.FindByCatalogId);
Console.WriteLine("该大类别的名称:"+catalogInfo.CatalogName);
Console.WriteLine("=======在小类别中查找========");
BoardFinderboardFinder=newBoardFinder();
boardFinder.BoardId=25;
BoardInfoboardInfo=boardList.Find(boardFinder.FindByBoardId);
Console.WriteLine("该小类别信息:小类别名称{0},所属大类别编号{1}",boardInfo.BoardName,boardInfo.CatalogId);
Console.WriteLine("=======在小类别中按大类别编号查找========");
boardFinder.CatalogId=9;
List<BoardInfo>boardInfoList=boardList.FindAll(boardFinder.FindByCatalogId);
foreach(BoardInfoinfoinboardInfoList)
{
Console.WriteLine("该小类别信息:小类别名称{0},所属大类别编号{1}",info.BoardName,info.CatalogId);
}
Console.ReadLine();
}
}