LIST.FindIndex(predicate<T> match)的参数问题
List.FindIndex(predicate<T> match)的参数是怎么写啊?这个看不懂。。。
谁能帮我
//删除一个教师记录
public static void Delete()
{
//根据工号查询,是否存在该记录,如不存在则提示,存在则删除
teacherID = Console.ReadLine(); //输入工号
//根据teacherID查询集合类 1.foreach遍历整个集合 2.List<T>类提供的FindIndex方法
int index1 = teacherList.FindIndex(teacherID);//----错误:参数不正确
if (index1 = (-1))
{
Console.WriteLine("没有此工号!");
}
else
{
teacherList.RemoveAt(index1);
}
上面代码FindIndex参数怎么写呢?
好心人,帮帮忙吧!
[解决办法]
teacherList的定义呢?
predicate<T>这样的泛型委托一般采用lambda表达式的形式来表示,形式是
i => i == teacherID
这里假定
var teacherList = new List<string>();
[解决办法]
predicate是个delegate,定义为:
public delegate bool Predicate<T> (T obj)
只要是个函数,或者匿名函数,符合上面的声明即可。
下面是msdn中List.FindIndex的例子,来自:
http://msdn.microsoft.com/zh-cn/library/x1xzf2ca(v=vs.80).aspx
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("\nFindIndex(EndsWithSaurus): {0}",
dinosaurs.FindIndex(EndsWithSaurus));
Console.WriteLine("\nFindIndex(2, EndsWithSaurus): {0}",
dinosaurs.FindIndex(2, EndsWithSaurus));
Console.WriteLine("\nFindIndex(2, 3, EndsWithSaurus): {0}",
dinosaurs.FindIndex(2, 3, 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;
}
}
}
/* This code example produces the following output:
Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops
FindIndex(EndsWithSaurus): 1
FindIndex(2, EndsWithSaurus): 5
FindIndex(2, 3, EndsWithSaurus): -1
*/
int index1 = teacherList.FindIndex(teacher=>teacher.teacherID==teacherID);
/// <summary>
/// 检查此控件是否支持指定的数据类型
/// </summary>
/// <param name="name">数据类型名称</param>
/// <returns>返回当前对象是否支持指定的数据类型</returns>
public bool HasSupportDataType(string name) {
name = name.ToLower();
return this._types.Exists(theType => {
return this.PredicateDataType(theType, name);
});
}
public BSysDataType DataType(string name) {
name = name.ToLower();
return this._types.Find(theType => {
return this.PredicateDataType(theType, name);
});
}
/// <summary>
/// 比较对象是否相等
/// </summary>
/// <param name="theType">要比较的对象</param>
/// <param name="name">对象名称</param>
/// <returns>返回对象是否相等</returns>
private bool PredicateDataType(BSysDataType theType, string name) {
return theType.Name.ToLower() == name;
}