有关C#泛型的一个问题

Golden_Shadow 2012-04-19 02:57:54
        protected void SortInDescendingOrder<T>(ref T[] array)
{
for (int i = 1; i < array.Length; ++i)
{
T temp = array[i];
int j = i;
while ((j > 0) && (array[j - 1] < temp))
{
array[j] = array[j - 1];
--j;
}
array[j] = temp;
}
}

错误 1 运算符“<”无法应用于“T”和“T”类型的操作数

这个要如何解决?求赐教!
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
纸箱猪 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

这个问题很好解决,只要这样写就可以了(如果可能为空,请再判断空值情况):
C# code

protected void SortInDescendingOrder<T>(ref T[] array) where T : IComparable
{
for (int i = 1; i < array.Length; ++i)
……
[/Quote]

+1
qldsrx 2012-04-19
  • 打赏
  • 举报
回复
这个问题很好解决,只要这样写就可以了(如果可能为空,请再判断空值情况):

protected void SortInDescendingOrder<T>(ref T[] array) where T : IComparable
{
for (int i = 1; i < array.Length; ++i)
{
T temp = array[i];
int j = i;
while ((j > 0) && (array[j - 1].CompareTo(temp) < 0))
{
array[j] = array[j - 1];
--j;
}
array[j] = temp;
}
}
cancerser 2012-04-19
  • 打赏
  • 举报
回复
int.Parse (array[j - 1].ToString())
Golden_Shadow 2012-04-19
  • 打赏
  • 举报
回复
多谢各位指教!
cheng2005 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:
没法解决,不知道T是个什么东西,怎么能知道T可以不可以进行 < 运算。

只能是提供一个委托,返回一个比较结果。

如果我想将T实例化为 int 或 float,该如何修改这段代码?
[/Quote]
System.Convert.ChangeType
我只想说,你这种范性的用法本身就是错的。
csrwgs 2012-04-19
  • 打赏
  • 举报
回复
错误原因是无法对一个通用的类进行四则运算,需要
override operator -

Golden_Shadow 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
没法解决,不知道T是个什么东西,怎么能知道T可以不可以进行 < 运算。

只能是提供一个委托,返回一个比较结果。
[/Quote]
如果我想将T实例化为 int 或 float,该如何修改这段代码?
cheng2005 2012-04-19
  • 打赏
  • 举报
回复
没法解决,不知道T是个什么东西,怎么能知道T可以不可以进行 < 运算。

只能是提供一个委托,返回一个比较结果。

110,538

社区成员

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

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

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