说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
作者:周公
日期:2007-12-28(没办法,去年写好的文章,因为csdn的博客不行,拖到今年发了 )
首发地址: http://blog.csdn.net/zhoufoxcn
上面分别是两个范型集合中用到的实体,以及将来要用于查找这些实体的辅助类,下面距离说明用法:
以下是输出结果:
msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
作者:周公
日期:2007-12-28(没办法,去年写好的文章,因为csdn的博客不行,拖到今年发了 )
首发地址: http://blog.csdn.net/zhoufoxcn
using
System;
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 大类别
/// </summary>
public class CatalogInfo
{
private int catalogId;
private string catalogName;
public string CatalogName
{
get { return catalogName; }
set { catalogName = value; }
}
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public CatalogInfo( int catalogId, string catalogName)
{
this .catalogId = catalogId;
this .catalogName = catalogName;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 大类别
/// </summary>
public class CatalogInfo
{
private int catalogId;
private string catalogName;
public string CatalogName
{
get { return catalogName; }
set { catalogName = value; }
}
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public CatalogInfo( int catalogId, string catalogName)
{
this .catalogId = catalogId;
this .catalogName = catalogName;
}
}
}
using
System;
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 查找符合特定条件的CatalogInfo类
/// </summary>
public class CatalogFinder
{
private int catalogId;
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public CatalogFinder()
{
}
public CatalogFinder( int catalogId)
{
this .catalogId = catalogId;
}
/// <summary>
/// 符合Predicate>T< match的方法
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public bool FindByCatalogId(CatalogInfo info)
{
return info.CatalogId == catalogId;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 查找符合特定条件的CatalogInfo类
/// </summary>
public class CatalogFinder
{
private int catalogId;
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public CatalogFinder()
{
}
public CatalogFinder( int catalogId)
{
this .catalogId = catalogId;
}
/// <summary>
/// 符合Predicate>T< match的方法
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public bool FindByCatalogId(CatalogInfo info)
{
return info.CatalogId == catalogId;
}
}
}
using
System;
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 小类别
/// </summary>
public class BoardInfo
{
private int boardId;
private string boardName;
private int catalogId;
/// <summary>
/// 所在大类别编号
/// </summary>
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public string BoardName
{
get { return boardName; }
set { boardName = value; }
}
public int BoardId
{
get { return boardId; }
set { boardId = value; }
}
public BoardInfo( int boardId, string boardName, int catalogId)
{
this .boardId = boardId;
this .boardName = boardName;
this .catalogId = catalogId;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ListDemo
{
/// <summary>
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// 小类别
/// </summary>
public class BoardInfo
{
private int boardId;
private string boardName;
private int catalogId;
/// <summary>
/// 所在大类别编号
/// </summary>
public int CatalogId
{
get { return catalogId; }
set { catalogId = value; }
}
public string BoardName
{
get { return boardName; }
set { boardName = value; }
}
public int BoardId
{
get { return boardId; }
set { boardId = value; }
}
public BoardInfo( int boardId, string boardName, int catalogId)
{
this .boardId = boardId;
this .boardName = boardName;
this .catalogId = catalogId;
}
}
}
上面分别是两个范型集合中用到的实体,以及将来要用于查找这些实体的辅助类,下面距离说明用法:
using
System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using ListDemo;
/// <summary>
/// 说明:在List <T> 范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
/// msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
/// 这一点msdn帮助里面说得很简单,只以List <string> 范型集合为例说了一些简单应用,这些完全不能满足
/// 一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
/// 一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
/// 作者:周公
/// 日期:2007-12-28
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// </summary>
public class Example
{
public static void Main()
{
// 初始化大类别集合
List < CatalogInfo > catalogList = new List < CatalogInfo > ( 10 );
for ( int i = 0 ; i < 10 ; i ++ )
{
catalogList.Add( new CatalogInfo(i, " 大类别 " + i));
}
// 初始化小类别集合,随机指定它们的大类别编号
List < BoardInfo > boardList = new List < BoardInfo > ( 50 );
Random random = new Random( 100 );
for ( int i = 0 ; i < 100 ; i ++ )
{
boardList.Add( new BoardInfo(i, " 小类别 " + i, random.Next() % 10 ));
}
Console.WriteLine( " =======在大类别中查找======== " );
CatalogFinder catalogFinder = new CatalogFinder( 5 );
CatalogInfo catalogInfo = catalogList.Find(catalogFinder.FindByCatalogId);
Console.WriteLine( " 该大类别的名称: " + catalogInfo.CatalogName);
Console.WriteLine( " =======在小类别中查找======== " );
BoardFinder boardFinder = new BoardFinder();
boardFinder.BoardId = 25 ;
BoardInfo boardInfo = 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 (BoardInfo info in boardInfoList)
{
Console.WriteLine( " 该小类别信息:小类别名称{0},所属大类别编号{1} " , info.BoardName, info.CatalogId);
}
Console.ReadLine();
}
}
using System.Collections.Generic;
using System.Drawing.Imaging;
using ListDemo;
/// <summary>
/// 说明:在List <T> 范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
/// msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
/// 这一点msdn帮助里面说得很简单,只以List <string> 范型集合为例说了一些简单应用,这些完全不能满足
/// 一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
/// 一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
/// 作者:周公
/// 日期:2007-12-28
/// 首发地址: http://blog.csdn.net/zhoufoxcn
/// </summary>
public class Example
{
public static void Main()
{
// 初始化大类别集合
List < CatalogInfo > catalogList = new List < CatalogInfo > ( 10 );
for ( int i = 0 ; i < 10 ; i ++ )
{
catalogList.Add( new CatalogInfo(i, " 大类别 " + i));
}
// 初始化小类别集合,随机指定它们的大类别编号
List < BoardInfo > boardList = new List < BoardInfo > ( 50 );
Random random = new Random( 100 );
for ( int i = 0 ; i < 100 ; i ++ )
{
boardList.Add( new BoardInfo(i, " 小类别 " + i, random.Next() % 10 ));
}
Console.WriteLine( " =======在大类别中查找======== " );
CatalogFinder catalogFinder = new CatalogFinder( 5 );
CatalogInfo catalogInfo = catalogList.Find(catalogFinder.FindByCatalogId);
Console.WriteLine( " 该大类别的名称: " + catalogInfo.CatalogName);
Console.WriteLine( " =======在小类别中查找======== " );
BoardFinder boardFinder = new BoardFinder();
boardFinder.BoardId = 25 ;
BoardInfo boardInfo = 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 (BoardInfo info in boardInfoList)
{
Console.WriteLine( " 该小类别信息:小类别名称{0},所属大类别编号{1} " , info.BoardName, info.CatalogId);
}
Console.ReadLine();
}
}