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,很郁闷啊~~ 展开
我写了这么个测试类,
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,很郁闷啊~~ 展开
4个回答
展开全部
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);
→→}
}
{
→→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);
→→}
}
展开全部
.........
我晕死,
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)
}
}
我晕死,
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)
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用==比较的是内存地址肯定不一样啦
用equals比较就是比较内容
用==比较值类型时,就可以
但比较引用类型就不行啦
String str = new String("abs");
string s = "abc";
str==s ; false
str.equals(s); true
值类型int float double...
引用类型有string 类 接口...
关于值类型与引用类型你最好就在网上搜一搜
用equals比较就是比较内容
用==比较值类型时,就可以
但比较引用类型就不行啦
String str = new String("abs");
string s = "abc";
str==s ; false
str.equals(s); true
值类型int float double...
引用类型有string 类 接口...
关于值类型与引用类型你最好就在网上搜一搜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
里面没值,对于所有找不到的IndexOf返回就是-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询