黑马程序员技术交流社区

标题: List<T>.Find()方法的运用 [打印本页]

作者: 来明坤    时间: 2012-8-27 18:01
标题: List<T>.Find()方法的运用
以前为了找到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(),这里就不多说了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2