委托自定义数组排序 项目一共三个文件如下。
CSort.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 委托自定义数组排序 { class CSort<T> { public CSort() { } /// <summary> /// /// </summary> /// <param name="arrObj"></param> internal void Show(T[] arrObj) { foreach (T item in arrObj) { Console.Write(item.ToString() + " "); } } /// <summary> /// /// </summary> /// <param name="arrObj"></param> /// <param name="comp"></param> internal void Sort(T[] arrObj, Comp<T> comp) { for (int i = 0; i < arrObj.Length; i++) {///arrObj.Length-i-1:至数组的最后一个元素 for (int j = 0; j < arrObj.Length - i - 1; j++) { if (comp(arrObj[j], arrObj[j + 1]) > 0) { T obj = arrObj[j]; arrObj[j] = arrObj[j + 1]; arrObj[j + 1] = obj; } } } } /// <summary> /// /// </summary> /// <param name="one"></param> /// <param name="two"></param> /// <returns></returns> public int CompObj(T one, T two) { if (typeof(int) is T) { return int.Parse(one.ToString()) - int.Parse(two.ToString()); } if (typeof(string) is T) { return (one.ToString()).Length - (two.ToString()).Length; } //if (typeof(Person) is T) // return ((Person)one).Age - ((Person)two).Age; return 0; } //public int CompObj(string one, string two) //{ // return one.Length - two.Length; //} //public int CompObj(int one, int two) //{ // return one - two; //} } //class Person //{ // /// <summary> // /// 年龄 // /// </summary> // private int age; // /// <summary> // /// 年龄 // /// </summary> // public int Age // { // get { return age; } // set { age = value; } // } // /// <summary> // /// 名字 // /// </summary> // private string name; // /// <summary> // /// 名字 // /// </summary> // public string Name // { // get { return name; } // set { name = value; } // } // /// <summary> // /// 性别 // /// </summary> // private string sex; // /// <summary> // /// 性别 // /// </summary> // public string Sex // { // get { return sex; } // set { sex = value; } // } //} }
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 委托自定义数组排序 { class Program { static void Main(string[] args) { int[] arrInt = new int[] { 1, 3, 1, 2, 3, 5, 6, 2, 4 }; string[] arrString = new string[] { "ab", "abc", "a", "abcd", "abc", "abcdef", "abcde" }; //Person[] arrPerson ={new Person(){Age=18,Name="ab",Sex=null}, // new Person(){Age=17,Name="a",Sex=null}}; CSort<string> s = new CSort<string>(); CSort<int> i = new CSort<int>(); //CSort<Person> p = new CSort<Person>(); s.Sort(arrString, s.CompObj); i.Sort(arrInt, i.CompObj); i.Show(arrInt); //p.Sort(arrPerson, p.CompObj); Console.WriteLine(); s.Show(arrString); //Type type2= arrInt.GetType(); //do //{ // type2 = type2.BaseType; ////Console.WriteLine(type2.ToString()); //} while (type2 != null); ////Console.WriteLine(arrInt.GetType().BaseType.BaseType.BaseType.ToString()); Console.ReadKey(); } } }
CSortDelegate.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 委托自定义数组排序 { public delegate int Comp<T>(T one, T two); }
运行没有错误!!!可是却也没有结果!!!
监视 T 却出现:
T “T”是一个“类型形参”,这在给定的上下文中无效
这是为什么???