如此List的问题应该怎么解决?谢谢!

robig 2008-12-07 08:20:37
            List<int[]> F = new List<int[]> { };
int[] f = new int[] { 1, 2, 3 };
F.Add(f);

f = new int[] { 1, 2, 3 };
int iii = 0;
if (F.Contains(f)) { iii = 1; }


运行后,iii=0;
应该怎么解决?谢谢!
...全文
62 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
WPengCH 2008-12-08
  • 打赏
  • 举报
回复
写一个强类型的集合类,继承List<T>,然后把Contains方法重写一下不就行了吗。
robig 2008-12-08
  • 打赏
  • 举报
回复
up
Kingofcode 2008-12-07
  • 打赏
  • 举报
回复
up
robig 2008-12-07
  • 打赏
  • 举报
回复
原因我已经明白了,我想问有没有简单的解决方法?
wuyq11 2008-12-07
  • 打赏
  • 举报
回复
list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法
数组是应用,比较的是地址,不是值,所以不一样。
int[] f = new int[] { 1, 2, 3 };
F.Add(f);

if (F.Contains(p)) { iii = 1; }比较的是同一个数组所以为1
pp_shy 2008-12-07
  • 打赏
  • 举报
回复
List中的类型是一个Int型数组是一个引用类型
int[] f = new int[] { 1, 2, 3 };//这步操作会在托管堆上生成一个Int型数组对象,并把对象的引用返回给f
F.Add(f);
f = new int[] { 1, 2, 3 };//这步操作会又在托管堆上生成一个新的Int型对象,并把这个新对象的引用返回给f,所以刚刚上面添加进泛型的对象和现在这个对象不是同一个对象

F.Contains(f)//因此这步操作返回值为false
bloodish 2008-12-07
  • 打赏
  • 举报
回复
数组属于引用类型
你两次new出f,两者的引用肯定不同,你后来的f,p也属于不同的引用,
对于引用类型,List的Contains默认比较的是引用是否相同,List是否包含int[]类型的某个引用。
robig 2008-12-07
  • 打赏
  • 举报
回复
如果没有第二句 f = new int[] { 1, 2, 3 };
iii就等于1; 但是我中间肯定要用的啊.变成
            List<int[]> F = new List<int[]> { };
int[] f = new int[] { 1, 2, 3 };
F.Add(f);

int[] p = new int[] { 1, 2, 3 };
int iii = 0;
if (F.Contains(p)) { iii = 1; }


也是不行.把 int[]f 变成static 的也不行.

110,571

社区成员

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

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

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