以前为了找到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(),这里就不多说了
|
|