自定义接口:
using System.Text;namespace MBS.Training
{
        ///  <summary>
        ///  Represents sort utility.
        /// </summary>
    interface ISortAlgorithm
    {
        /// <summary>
        /// Sorts the elements using selection algorithm
        /// </summary>
        /// <typeparam name="T">The type of comparable elements</typeparam>
        /// <param name="elements">Elements will be sorted</param>
        /// <returns>Sorted elements</returns>
        T[] SelectionSort<T>(T[] elements);         /// <summary>
        /// Sorts the elements using bubble algorithm
        /// </summary>
        /// <typeparam name="T">The type of comparable elements</typeparam>
        /// <param name="elements">Elements will be sorted</param>
        /// <returns>Sorted elements</returns>
        T[] BubbleSort<T>(T[] elements);        /// <summary>
        /// Sorts the elements using insertion algorithm
        /// </summary>
        /// <typeparam name="T">The type of comparable elements</typeparam>
        /// /// <param name="elements">Elements will be sorted</param>
        /// <returns>Sorted elements</returns>
        T[] InsertSort<T>(T[] elements);
    }
}
排序类:
namespace MBS.Training
{
    class DataSorting<T> : ISortAlgorithm where T : IComparable<T>
    {
        //选择排序
        public T[] SelectionSort<T>(T[] elements)
        {
            for(int k=0;k<=elements.Length-1;k++)
            {  //作k-1趟选取

    int min=k;                for (int i = min + 1; i <= elements.Length-1; i++)//选择关键字最小的元素的索引
                {
                    if (elements[i].CompareTo(elements[min])) min = i;
       }
    if(k!=min)
                {
    T temp=elements[min];
    elements[min]=elements[k];
    elements[k]=temp;
    }

     }
            return elements;
            foreach (T data in elements)
            {
                System.Windows.Forms.MessageBox.Show("the end sort is: "+data);
            }
}
    }}从昨天折腾到今天还没折腾出来,请高手帮忙。在线等....

解决方案 »

  1.   

    public T[] SelectionSort(T[] elements)
      

  2.   

    public T[] SelectionSort<T>(T[] elements)
    把这个方法上面的<T>去掉
      

  3.   

    你只是让DataSorting<T>类实现了IComparable<T>接口,表示你可以将两个
    DataSorting<T>类型的变量相互比较,但是你真正的目的是想让两个elements[k];
    进行比较,即两个T类型变量的比较,而类型T是否实现了IComparable接口,系统是不知道的。
    如果你的每个element[i]中的变量是简单类型,如string、int什么的,或者你确定类型T实现了IComparable接口,你可以做如下修改if (elements[i].CompareTo(elements[min])) 
    ---->
    if(elements[i] is IComparable &&
     ((IComparable)elements[i]).CompareTo(elements[min])
    )
      

  4.   

    让T也实现一下ICompable接口或者试一下边的代码, 没有示例的T类代码,也不知道你是显示实现还是隐式实现的那个接口,如果是显式实现,必须要转为接口类型才能调到方法
    ((IComparable<T>)elements[i]).CompareTo((IComparable<T>)elements[min])
      

  5.   


    才开始接触C# 很多地方不是很熟 在class DataSorting<T> : ISortAlgorithm where T : IComparable<T>这个类的定义中 where T:IComparable 是不是就已经让T实现了IComparable接口呢?如果不是,那这句话是什么意思?
      

  6.   

     我写成这样了,不报错,可是BubbleSort方法不知道怎么调用
    class Sort : ISortAlgorithm 
            {
                public T[] BubbleSort<T>(T[] elements)
                {
                    for (int i = 0; i < elements.Length; i++)
                    {
                        for (int j = i + 1; j < elements.Length; j++)
                        {
                            if ((Convert.ToInt32(elements[j]))<(Convert.ToInt32(elements[i])))
                            {
                                T temp = elements[j];
                                elements[j]=elements[i];
                                elements[i] = temp;
                            }
                        }
                    }
                    foreach (T data in elements)
                    {
                        Console.WriteLine("排序后:"+data);
                    }
                        throw new NotImplementedException();
                }调用方法:
    static void Main(string[] args)
            {
                int[] list={4,6,2,0,1};
                Sort s = new Sort();
                s.BubbleSort<List>;
            }
    s.BubbleSort<List>;出错!应该怎么调用啊!
      

  7.   

    改成int[] list=new int[]{4,6,2,0,1};后再试试