关于泛型的问题???

xq1981 2010-07-23 10:55:26

protected void Page_Load(object sender, EventArgs e)
{
Maths<int> mm = new Maths<int>();
Response.Write(mm.Adds(8,9) + "<br/>");
Maths<decimal> ms = new Maths<decimal>();
Response.Write(ms.Adds(8.5,9.5));
}


class Maths<T>
{
public T Adds(T t1,T t2)
{
return t1+t2;
}
}

编译后报错:编译器错误信息: CS0019: 运算符“+”无法应用于“T”和“T”类型的操作数
请问要如何修改???
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2010-07-23
  • 打赏
  • 举报
回复
可以定义接口,泛型约束...

你的思路有问题,泛型不是这样用的...
chen_ya_ping 2010-07-23
  • 打赏
  • 举报
回复
框架设计 第二版 中对泛型的讨论很好,楼主可以去看看。
chen_ya_ping 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 xq1981 的回复:]
C# code

protected void Page_Load(object sender, EventArgs e)
{
Maths<int> mm = new Maths<int>();
Response.Write(mm.Adds(8,9) + "<br/>");
Maths<decimal> ms = new Math……
[/Quote]
那是因为你的编译器编译时都不知道你要具体的提供什么样子的类型,比如你提供的类型中,没有+这个功能,,那肯定是错的。
wanghui0380 2010-07-23
  • 打赏
  • 举报
回复
我觉得lz实际不必重新造轮子,linq中的sum本身就可以做到

xq1981 2010-07-23
  • 打赏
  • 举报
回复
那我里面的参数如果要操作的话,那岂不是又走到了重载的老路上来了???
阿彪兄 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wanghui0380 的回复:]
一个基础性的问题

泛型不支持操作符,这是msdn明确说明过的

除非你自己重载相关操作符,或者定义相关接口
[/Quote]
很有道理
wanghui0380 2010-07-23
  • 打赏
  • 举报
回复
一个基础性的问题

泛型不支持操作符,这是msdn明确说明过的

除非你自己重载相关操作符,或者定义相关接口
xq1981 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingdongfang 的回复:]
引用 2 楼 luolina1989 的回复:
C# code

class Maths<T>
{
public T Adds(T t1,T t2)
{
return t1+t2;
}
}


LZ 这里写错了吧!返回T?T是什么类型?如果是string类型,是不能直接相加的!


楼主说得对,从这个角度上来看,这个类根本不知道T是什么类型,它怎么可以相加呢?
[/Quote]
如果这种功能泛型也不能实现,到底什么时候用泛型好呢?不会仅仅只是显示一下类的属性,而不能在里面构建逻辑吗?
xingdongfang 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luolina1989 的回复:]
C# code

class Maths<T>
{
public T Adds(T t1,T t2)
{
return t1+t2;
}
}


LZ 这里写错了吧!返回T?T是什么类型?如果是string类型,是不能直接相加的!
[/Quote]

楼主说得对,从这个角度上来看,这个类根本不知道T是什么类型,它怎么可以相加呢?
xq1981 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luolina1989 的回复:]
C# code

class Maths<T>
{
public T Adds(T t1,T t2)
{
return t1+t2;
}
}


LZ 这里写错了吧!返回T?T是什么类型?如果是string类型,是不能直接相加的!
[/Quote]
问题是我单独执行:
Maths<int> mm = new Maths<int>();
Response.Write(mm.Adds(8,9) + "<br/>");
也是报错啊!
Aquarius娜吖 2010-07-23
  • 打赏
  • 举报
回复

class Maths<T>
{
public T Adds(T t1,T t2)
{
return t1+t2;
}
}

LZ 这里写错了吧!返回T?T是什么类型?如果是string类型,是不能直接相加的!
吴青峰 2010-07-23
  • 打赏
  • 举报
回复
改成这个试下:
public T Adds<T>(T t1,T t2)
{
return t1+t2;
}
xq1981 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vrhero 的回复:]
可以定义接口,泛型约束...

你的思路有问题,泛型不是这样用的...
[/Quote]
有否这方面的典型实例???

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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