class Program { public static void Main(string[] args) { DeleTest dt = new DeleTest(); //int pos = dt.Find("WW"); //Console.WriteLine(pos.ToString()); //int posInt = dt.FindInt(6); //Console.WriteLine(posInt.ToString()); int pos = dt.Find2("WW"); Console.WriteLine(pos.ToString()); int posInt = dt.FindInt2(6); Console.WriteLine(posInt.ToString()); Console.ReadLine(); } } class DeleTest { public List<string> list = new List<string>(); private void InitList() { list.Add("QQ"); list.Add("WW"); list.Add("EE"); list.Add("RR"); list.Add("TT"); } public List<int> listInt = new List<int>(); private void InitListInt() { listInt.Add(2); listInt.Add(4); listInt.Add(6); listInt.Add(8); listInt.Add(10); } public DeleTest() { this.InitList(); this.InitListInt(); } //如果参数中含有范型 那么函数,委托声明后加<>中必须有范型 //private int FindPosition<T>(List<T> tempList)是正确的 //private int FindPosition(List<T> tempList)错误 //{ // return -1; //} //delegate void Func3(T t);错误 //delegate void Func3<T>(T t);正确 #region Anonymous function 匿名方法 delegate TResult Func<T, TResult>(T t);//范型委托 private int FindPosition<T>(Func<T, bool> pre, List<T> tempList) { for (int i = 0; i < tempList.Count; i++) { if (pre(tempList[i])) return i + 1; } return -1; } public int Find(string val) { return FindPosition<string>(delegate(string val2) { return val == val2; }, list); } public int FindInt(int val) { return FindPosition<int>(delegate(int val2) { return val == val2; }, listInt); } #endregion #region Function实名方法 delegate TResult Func2<T, TResult>(T t, T t2);//范型委托 private int FindPosition<T>(Func2<T, bool> pre, List<T> tempList, T t) { for (int i = 0; i < tempList.Count; i++) { if (pre(tempList[i], t)) return i + 1; } return -1; } public int Find2(string val) { return FindPosition<string>(Find2Fun, list, val); } private bool Find2Fun(string val2,string val) { return val2 == val; } public int FindInt2(int val) { return FindPosition<int>(FindInt2Fun, listInt, val); } private bool FindInt2Fun(int val2, int val) { return val2 == val; } #endregion } 有范型的时候,必须要在声明后加<> ,里面的内容是需要的类型. 匿名方法和实名方法都是实现一样的效果,但是实名方法的委托多了一个传递参数 本人是初学者,如果有错误希望大家指正.