c#数组的Array.IndexOf问题

qq_24853579 2014-12-30 08:42:29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 数组的查找排序
{
class Circle:IComparable
{
int radius;
public Circle(int radius)
{
this.radius = radius;
}
public int CompareTo(Object obj)
{
int rad;
rad=((Circle)obj).radius;//强制转换,然后调用
if (rad > radius)
return -1;
else if (rad < radius)
return 1;
else
return 0;
}
public override string ToString()
{
return ""+radius;
}
}
class Class1
{
static void PrintArray(Array MyArr)
{
foreach (Object i in MyArr)
{
Console.Write("\t{0}",i);
}
Console.WriteLine();
}
public static void Main()
{
Circle[] circle = new Circle[] { new Circle(7), new Circle(3), new Circle(4), new Circle(5), new Circle(6) };
Console.WriteLine("排序前:");
PrintArray(circle);

//索引1
Circle a = new Circle(3);
int c = Array.IndexOf(circle,a);
Console.WriteLine(c);



Array.Sort(circle);
Console.WriteLine("排序后:");
PrintArray(circle);

//索引2
string[] d = { "桃花", "菊花" };
int f = Array.IndexOf(d, "桃花");
Console.WriteLine(f);

Console.ReadLine();



}
}
}
索引1 输出的结构永远是-1为什么啊,到底哪里错了,索引2的却是对的
...全文
618 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_QQ:2335298917 2014-12-30
  • 打赏
  • 举报
回复
circle重载equals函数后就是正确的了,string的equals函数是写好的,比较字符串的内容,所以索引2一开始就是正确的
qq_24853579 2014-12-30
  • 打赏
  • 举报
回复
非常感谢,我知道了!!!
qq_24853579 2014-12-30
  • 打赏
  • 举报
回复
我添加了这个是正确的,可是没有添加的时候索引2 也是正确的呀????
wjq 2014-12-30
  • 打赏
  • 举报
回复
IndexOf 用的是判断等于,不是比大小,你的类是引用类型,不同实力没有重载Equals自然不会相等
tcmakebest 2014-12-30
  • 打赏
  • 举报
回复
仔细研究了下,发现 IndexOf 需要用到这个重载:
public override bool Equals(object obj)
        {
            return CompareTo(obj) == 0;
        }
qq_24853579 2014-12-30
  • 打赏
  • 举报
回复
那应该怎么写呢
回.到.未来 2014-12-30
  • 打赏
  • 举报
回复
a和circle 数组中的new Circle(3)是对不同对象的引用,两者不相等,所以indexOf是找不到的

110,538

社区成员

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

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

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