你把a也定义成泛型试试~别把a定义成int
T a;

解决方案 »

  1.   

    弄了N久没出来哎http://www.baidu.com/s?wd=%C1%BD%B8%F6%B7%BA%D0%CD%CA%FD%BE%DD%D4%F5%D1%F9%B1%C8%BD%CF&cl=3
    希望对你有帮助我百度了一下~
      

  2.   


      private void CompareData<T>(T[] datas,ref T Max,ref T Min) where T:IComparable
            {
                Max = datas[0];
                Min = datas[0];
                for (int i = 0; i < datas.Length; i++)
                { 
                  if(Max.CompareTo(datas[i])<0)
                    Max=datas[i];
                  if (Min.CompareTo(datas[i])>0)
                      Min = datas[i];
                }
              
            }..... CompareData<int>(IntArray, ref MaxInt, ref MinInt);   //调用泛型方法
    .....
      

  3.   

    还是没有解决问题:
    写一个泛型的方法求一个数的绝对值: 
    static   T   Abs <T> (T   a)     //这里以泛型方法为例,不写泛型类了 

    return   a> 0?a:-a; 
    } 编译错误为: 
    1.运算符“> ”无法应用于“T”和“int”类型的操作数 
    2.运算符“-”无法应用于“T”类型的操作数 c++中并没有这样的问题 请问这个方法该怎么写呢?
      

  4.   

    你要使用Comparer<>来代替你的 > 比较运算符,或者自己实现一个Comparer可以看看我的文章 http://blog.csdn.net/fuadam/archive/2007/12/14/1935872.aspx然后你不能直接跟0比较,因为.net是运行时判定的他不知道这时候T到底是什么.所以你要使用default(T)来得到T类型的默认值,如 int类型就是0.如果你使用自定义类型就需要自己编写Comparer了.然后你需要个delegate来取代operator-,因为c#下不能之间调用操作符函数.完整代码如下:public delegate T OP_Inverter<T>(T t);    //非操作public static T abc<T>(T t, OP_Inverter<T> inverter)
            {
                int flag = Comparer<T>.Default.Compare(t, default(T));  //得到比较结果            if (flag < 0)
                    return inverter(t);                                 //小于就取非
                else
                    return t;           
            }
    //调用代码
    abc(-5.024, delegate(double d)
                {
                    return 0 - d;
                });
    是不死超级麻烦?你就不该用泛型做这种事,直接函数重载不得了.
      

  5.   

    这当然不能比因为并不知道T是不是int