c#菜鸟问题List<T>泛型类的值的比较问题

问一个.Net的问题(语言C#),List<T>泛型类,我写了这么个测试类,classA{publicinti;publicintj;publicA(inta,intb)... 问一个.Net的问题(语言C#),List<T>泛型类,
我写了这么个测试类,
class A
{
public int i;
public int j;
public A(int a,int b)
{
i=a;
j=b;
}
}
////////////////////////////////
然后运行这样的代码
List<A> test=new List<A>();
test.Add(new A(0,0));
A temp=new A(0,0);
然后比较 test[0]==temp居然是false!!!
谁知道怎么回事啊?
由于这个原因,IndexOf()也一律返回-1,很郁闷啊~~
展开
 我来答
草薙在
2009-05-24 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6320万
展开全部
private class A : IEquatable<A>
{
→→public int i;
→→public int j;

→→public A(int a, int b)
→→{
→→→→i = a;
→→→→j = b;
→→}

→→public bool Equals(A other)
→→{
→→→→if (ReferenceEquals(null, other)) return false;
→→→→if (ReferenceEquals(this, other)) return true;
→→→→return other.i == i && other.j == j;
→→}

→→public override bool Equals(object obj)
→→{
→→→→if (ReferenceEquals(null, obj)) return false;
→→→→if (ReferenceEquals(this, obj)) return true;
→→→→if (obj.GetType() != typeof (A)) return false;
→→→→return Equals((A) obj);
→→}

→→public override int GetHashCode()
→→{
→→→→unchecked
→→→→{
→→→→→→return (i*397) ^ j;
→→→→}
→→}

→→public static bool operator ==(A left, A right)
→→{
→→→→return Equals(left, right);
→→}

→→public static bool operator !=(A left, A right)
→→{
→→→→return !Equals(left, right);
→→}
}
百度网友dc91b32
2009-05-24 · TA获得超过5650个赞
知道大有可为答主
回答量:5653
采纳率:0%
帮助的人:0
展开全部
.........
我晕死,
A temp=new A(0,0);
这是创建一个新的对象A,怎么可能跟以前的对象相等?

这就好比:
A a1 = new A(0,0);
A a2 = new A(0,0);
这里a1和a2也不相等,因为是两个不同的对象,是两个不同的内存单元,a1==a2也是false,

看出来你的意思了,你需要重载==运算符才能相等:
public static bool operator ==(A left,A right)
{
return (left.i==right.i && left.j==right.j)
}

全部代码:
class A
{

public int i;
public int j;

public A(int a,int b)
{
i=a;
j=b;
}

public static bool operator ==(A left,A right)
{
return (left.i==right.i && left.j==right.j)
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赢在心中
2009-05-24
知道答主
回答量:28
采纳率:0%
帮助的人:0
展开全部
你用==比较的是内存地址肯定不一样啦
用equals比较就是比较内容
用==比较值类型时,就可以
但比较引用类型就不行啦
String str = new String("abs");
string s = "abc";
str==s ; false
str.equals(s); true

值类型int float double...
引用类型有string 类 接口...

关于值类型与引用类型你最好就在网上搜一搜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
士谱赞南京J
2009-05-24 · TA获得超过116个赞
知道答主
回答量:77
采纳率:0%
帮助的人:0
展开全部
里面没值,对于所有找不到的IndexOf返回就是-1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式