注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

简约男人

简约,不能简单

 
 
 

日志

 
 
关于我

一个过分渴望被理解的人其实就是一个软弱的人, 勇往直前的力量来自斩钉截铁的决心,不是来自别人的理解.

网易考拉推荐

C#中泛型容器的查找方法的使用  

2010-04-23 19:15:34|  分类: C\C++\C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用查找方法时需要定义一个函数

然后用此函数构造一个Predicate<T>类型的delegate,然后将此作为查找符合某一条件的元素的条件谓词。

很显然的使用如下,来自MSDN。

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Compsognathus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Oviraptor");
        dinosaurs.Add("Velociraptor");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Dilophosaurus");
        dinosaurs.Add("Gallimimus");
        dinosaurs.Add("Triceratops");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}",
            dinosaurs.TrueForAll(EndsWithSaurus));

        Console.WriteLine("\nFind(EndsWithSaurus): {0}",
            dinosaurs.Find(EndsWithSaurus));

        Console.WriteLine("\nFindLast(EndsWithSaurus): {0}",
            dinosaurs.FindLast(EndsWithSaurus));

        Console.WriteLine("\nFindAll(EndsWithSaurus):");
        List<string> sublist = dinosaurs.FindAll(EndsWithSaurus);

        foreach(string dinosaur in sublist)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\n{0} elements removed by RemoveAll(EndsWithSaurus).",
            dinosaurs.RemoveAll(EndsWithSaurus));

        Console.WriteLine("\nList now contains:");
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nExists(EndsWithSaurus): {0}",
            dinosaurs.Exists(EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

在上边的用于构造Predicate<T>类型的delegate的方法是EndsWithSaurus(String s)。它的参数类型是容器中存放的元素的类型。执行时按照一定的算法将容器中的元素作为参数传递给用于查找的委托。我们要查找以"saurus"结尾的元素时定义了上面的方法。然而当我们要查找以"fuck you"结尾的元素时呢?再定义一个EndsWithFuckYou吗?显然这是不明智的。我们应该做的是定义个内部类,可以被称作查找器。类中有一个成员存储了查找的条件,为此类定义一个将容器中的元素与此查找条件比较的方法。使用时实例化此查找器,用此查找器构造一个Predicate<T>类型的delegate。然后将它传入查找函数。示例:

internal class stringSearcher

{

    string text;

    //构造函数用于构造条件

    public stirngSearcher(string c)

    {

        text = c;

    }

    public EndWidthText(string s)

    {

         return (s == text);

    }

}

使用时:

stringSearcher mySearcher = new stringSearcher("fuck you");

xxx.Find(new Predicate<string>(mySearcher.EndWidthText));

 

  评论这张
 
阅读(2046)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017