A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 来明坤 中级黑马   /  2012-8-27 18:01  /  2383 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以前为了找到LIST集合中某个特定项,还傻傻的用foreach去遍历集合,再返回符合条件的项。其中,微软早已提供了一个很好的方法来查找特定的LIST,那就是Find()方法。
List<T>.Find()接收一个类型为T的委托,并且返回值为bool类型。
示例:
[csharp] view plaincopyprint?
class Program  
    {  
        static void Main(string[] args)  
        {  
            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("\nFind(EndsWithSaurus): {0}",  
                dinosaurs.Find(EndsWithSaurus));        //结果为:Amargasaurus  
        }  
  
        private static bool EndsWithSaurus(String s)  
        {  
            if ((s.Length > 5) &&  
                (s.Substring(s.Length - 6).ToLower() == "saurus"))  
            {  
                return true;  
            }  
            else  
            {  
                return false;  
            }  
        }  
    }  
EndsWithSaurus即为对应的委托方法。
还有更强大的可以直接用C#中的匿名方法,推荐使用匿名方法,代码简洁,而且还可以在方法中取到局部变量,这点很重要。
示例:
[csharp] view plaincopyprint?
int i = 5; //设置一个局部变量,用于匿名方法中  
  
Console.WriteLine("\nFind(EndsWithSaurus): {0}",  
    dinosaurs.Find(delegate(string s) {  
        return (s.Length > i) && (s.Substring(s.Length - 6).ToLower() == "saurus");  
    }));        //结果为:Amargasauru  
还有用法差不多的FindAll(),这里就不多说了

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马