/// <summary>
    /// 年龄升序
    /// </summary>
    public class AgeSort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.StdBorn.CompareTo(y.StdBorn);
        }
    }
    /// <summary>
    /// 年龄倒序
    /// </summary>
    public class AgeDescSort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return y.StdBorn.CompareTo(x.StdBorn);
        }
    }
    /// <summary>
    /// 姓名升序
    /// </summary>
    public class NameSort:IComparer<Student>
    {        public int Compare(Student x, Student y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
    /// <summary>
    /// 工厂类
    /// </summary>
    public class Factory
    {
        public static IComparer<Student> StuSort(string sortType)
        {
            return Assembly.GetAssembly(typeof(Factory)).CreateInstance("ConsoleApplication2."+sortType) as IComparer<Student>;
        }
    }
    
    /// <summary>
    /// 学生类
    /// </summary>
    public class Student : IComparable<Student>
    {
        //学号
        public int stdId { get; set; }
        //姓名
        public string Name { get; set; }
        //座位号
        public int SeatNo { get; set; }
        //出生日期
        public DateTime StdBorn { get; set; }
        public int CompareTo(Student other)
        {
            return this.stdId.CompareTo(other.stdId);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {            List<Student> stuList = new List<Student>()
            {
                new Student{stdId=4,Name="b",SeatNo=2,StdBorn=new DateTime(1991,1,1)},
                 new Student{stdId=3,Name="c",SeatNo=3,StdBorn=new DateTime(1993,1,1)},
                  new Student{stdId=2,Name="d",SeatNo=4,StdBorn=new DateTime(1994,1,1)},
                   new Student{stdId=1,Name="a",SeatNo=1,StdBorn=new DateTime(1992,1,1)},
       
            };            stuList.Sort(Factory.StuSort("AgeSort"));            for (int i = 0; i < stuList.Count; i++)
            {
                Console.WriteLine(stuList[i].stdId+"\t"+stuList[i].Name+"\t"+stuList[i].SeatNo+"\t"+stuList[i].StdBorn);
            }            Console.WriteLine();
            stuList.Sort(Factory.StuSort("NameSort"));            for (int i = 0; i < stuList.Count; i++)
            {
                Console.WriteLine(stuList[i].stdId + "\t" + stuList[i].Name + "\t" + stuList[i].SeatNo + "\t" + stuList[i].StdBorn);
            }
        }
    }
          以上是代码,stuList.Sort(Factory.StuSort("NameSort"));我调用工厂类的方法使却不走那个对象内部的方法,反而走Student类的方法,每次排序结束都是stdID顺序,很是苦恼,求好心朋友相助

解决方案 »

  1.   

    return Assembly.GetAssembly(typeof(Factory)).CreateInstance("ConsoleApplication2."+sortType) as IComparer<Student>;
    这行改成两行
    object obj = Assembly.GetAssembly(typeof(Factory)).CreateInstance("ConsoleApplication2." + sortType);
    return obj as IComparer<Student>;
    第一行设置断点,单步执行下去,看 obj 是不是 null,如果是,检查下 ConsoleApplication2 是不是 AgeSort 所在的命名空间
      

  2.   

    http://blog.csdn.net/q107770540/article/details/6133484
      

  3.   


    4       b       2       1991-1-1 0:00:00
    1       a       1       1992-1-1 0:00:00
    3       c       3       1993-1-1 0:00:00
    2       d       4       1994-1-1 0:00:001       a       1       1992-1-1 0:00:00
    4       b       2       1991-1-1 0:00:00
    3       c       3       1993-1-1 0:00:00
    2       d       4       1994-1-1 0:00:00
    我怎么没修改,答案就是正确的?
      

  4.   

    唯一修改的就是
    return Assembly.GetAssembly(typeof(Factory)).CreateInstance("ConsoleApplication2."+sortType) as IComparer<Student>;这个ConsoleApplication2修改为自己的命名空间ConsoleApplication1