泛型怎么用啊?

hehahehahe 2007-12-15 09:02:42
以前用过c++的模板,但感觉c#的泛型并没有模板那么好用
比如我要写一个泛型的方法求一个数的绝对值:
static T Abs<T>(T a) //这里以泛型方法为例,不写泛型类了
{
return a>0?a:-a;
}

编译错误为:
1.运算符“>”无法应用于“T”和“int”类型的操作数
2.运算符“-”无法应用于“T”类型的操作数

c++中并没有这样的问题

请问这个方法该怎么写呢?
...全文
179 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel1949 2007-12-20
  • 打赏
  • 举报
回复
这当然不能比。。。因为并不知道T是不是int
fuadam 2007-12-17
  • 打赏
  • 举报
回复
你要使用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;
});
是不死超级麻烦?你就不该用泛型做这种事,直接函数重载不得了.
QQQQAnnie 2007-12-17
  • 打赏
  • 举报
回复
up
hehahehahe 2007-12-17
  • 打赏
  • 举报
回复
还是没有解决问题:
写一个泛型的方法求一个数的绝对值:
static T Abs <T> (T a) //这里以泛型方法为例,不写泛型类了
{
return a> 0?a:-a;
}

编译错误为:
1.运算符“> ”无法应用于“T”和“int”类型的操作数
2.运算符“-”无法应用于“T”类型的操作数

c++中并没有这样的问题

请问这个方法该怎么写呢?
xiaojing7 2007-12-15
  • 打赏
  • 举报
回复
学习
fuadam 2007-12-15
  • 打赏
  • 举报
回复
c#泛型不能再编译时认定它是运行时认定的,所以没有c++模板好用
liuyun1987 2007-12-15
  • 打赏
  • 举报
回复

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); //调用泛型方法
.....
sww5219999 2007-12-15
  • 打赏
  • 举报
回复
弄了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
希望对你有帮助我百度了一下~
sww5219999 2007-12-15
  • 打赏
  • 举报
回复
不好意思弄错了~
sww5219999 2007-12-15
  • 打赏
  • 举报
回复
你把a也定义成泛型试试~别把a定义成int
T a;

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧