编写一个通用的类,实现以下三个功能: 
1、可以保存不同数据类型的数据(最大数量为100)。 
2、可以通过下标访问数据。 
3、提供一个函数,可以对整个数据重新排序。上面是这个类的要求。对于1,2两点,我已经实现。用泛型做到保存不同数据类型的数据。用索引器做到下标访问数据。
对于这第三点,我想不出解决方案来。大家帮忙想想解决方案,谢谢。我的理解是,我自己的类 A<int> a = new A<int>(); a[0] = 1,a[1] = 2,a[2] = 3 。 a.sort()就实现排序。想了半天,毫无思路,大家帮帮忙 

解决方案 »

  1.   

    这个排序如果对于数值类型还好说,如果对于string等其他类型,你怎么处理呢
      

  2.   

    自定义类 自己实现接口IComparar<T> 或者IComparable<T>就可以了
      

  3.   

    C#类型安全的语言T不能直接比较大小。好像可以间接解决lz搜下
      

  4.   


     lst.Sort(
                    delegate(string sf1, string sf2)
                    {
                        return sf1.CompareTo(sf2);
                    });
      

  5.   


    这个我确实也想过~~不过字符串也有字符串的比较方法。关键的问题还是在于我现在根本没法写排序,要写排序,肯定要对索引的那个数据库做比较,但是,他们的类型是泛型的,没法比较。如果要重写IComparable接口的话,肯定要写在T这个类里面,矛盾的是,T是声明泛型的类,也就是T在运行时是确定的。所以无解中~~
      

  6.   


    这个只是实现了string类,那其他类怎么办?比如说我自己定义的 student类?
      

  7.   

    from q in lst orderby q.id select q;
    Icomparer <T>接口  public static Func<T,Tkey> DynamicLambda<T, Tkey>(string propertyName)
            {
             
                ParameterExpression p = Expression.Parameter(typeof(T), "p");
                Expression body = Expression.Property(p, typeof(T).GetProperty(propertyName));
                
                var lambda = Expression.Lambda<Func<T, Tkey>>(body, p);
               
                return lambda.Compile();
            }
      

  8.   

    排序方法让其传入 排序委托就可以啦!其实跟C#里面的LIST一样,将排序的逻辑(比较大小)让调用者自己实现。如果需要做成通用的,就需要限制类型的属性了,例如要求类里必须有AGE属性,然后实现根据AGE排序的方法就可以了
      

  9.   


    可以限制T为某个基类,Where T:BaseEntity,然后就可以使用BASEENTITY里面的属性进行排序了
      

  10.   


    谢谢你~~刚才问我们的技术总监也是这么说的~~以前是搞JAVA的,没接触过LINQ的东西~~看来还得进一步学习~~