还是List.Contains(T item)的问题

superray2008 2009-03-03 08:06:49
我已经建的一个Mail_DATA类
和 一个List<Mail_DATA>类

然后
public static List<Mail_DATA> mailList = new List<Mail_DATA>();
public static Mail_DATA mail_data = new Mail_DATA();
public static bool mail_Repeat;

......(分析过程)

if (mailList.Contains(mail_data) == false)
{
mailList.Add(mail_data);
mail_Repeat = false;
}


为什么我把两封一样的邮件经分析后一模一样的数据mail_data先后导入进去,第2封信还是会加到mailList里去 ?? 搞不懂..
...全文
2098 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanyoliu 2012-01-11
  • 打赏
  • 举报
回复
感謝6樓的方法,找了好久都沒辦法解決 Contains 二個參數的問題
li704898043 2011-06-18
  • 打赏
  • 举报
回复
学习了,都忘记了……
wycyun 2010-12-21
  • 打赏
  • 举报
回复
看看答案
csdnfan 2009-10-21
  • 打赏
  • 举报
回复
我用的是VS2008用二楼的方法是可行的。呵呵学习了。找了好久原因呢。
dzpzds 2009-06-18
  • 打赏
  • 举报
回复
学习了
hxxxs 2009-03-04
  • 打赏
  • 举报
回复
引用类型,需要重载Mail_DATA类的Equals()函数:
public override bool Equals(System.Object obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}

// If parameter cannot be cast to Mail_DATA return false.
Mail_DATA c = obj as Mail_DATA;
if ((System.Object)c == null)
{
return false;
}

// Return true if the fields match:
return (this.属性1== c.属性1) && (this.属性2== c.属性2)&&...;//这里根据需要确定,哪些属性能够确定两个对象equal的列出
}
superray2008 2009-03-04
  • 打赏
  • 举报
回复
用6楼的成功了,哈哈,非常感谢!!!
iGouzy 2009-03-04
  • 打赏
  • 举报
回复
楼主,List 不能剔除重复键的,用以上各位的方法用 Contains 判断,如果没有这个方法(PS:2.0 已经有 Contains 啦!),可以继承 List<> ,然后重写 Add 就行啦~~
我姓区不姓区 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 superray2008 的回复:]
回复4楼:
用的是VS2005  很多东西已经弄好,再改用Dictionary就很麻烦,所以....
[/Quote]
那就像6楼说的,重写一下Mail_DATA类的Equals方法吧
superray2008 2009-03-04
  • 打赏
  • 举报
回复
回复4楼:
用的是VS2005 很多东西已经弄好,再改用Dictionary就很麻烦,所以....
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
你用Dictionary行不?
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 superray2008 的回复:]
Error 1 No overload for method 'Contains' takes '2' arguments

Console.WriteLine(list.Contains(tc2, new TestComparer <TestClass>()));这行运行有错误...


第一个结果为什么是false??
[/Quote]
你用的是vs2005?,貌似Contains方法的第二个重载只有3.5版本才有……
我再给你试试别的方法
superray2008 2009-03-03
  • 打赏
  • 举报
回复
Error 1 No overload for method 'Contains' takes '2' arguments

Console.WriteLine(list.Contains(tc2, new TestComparer<TestClass>()));这行运行有错误...


第一个结果为什么是false??
我姓区不姓区 2009-03-03
  • 打赏
  • 举报
回复
参考:

static void Main(string[] args)
{
TestClass tc1 = new TestClass();
tc1.i = 1;
TestClass tc2 = new TestClass();
tc2.i = 1;
List<TestClass> list = new List<TestClass>();
list.Add(tc1);
Console.WriteLine(list.Contains(tc2));
Console.WriteLine(list.Contains(tc2, new TestComparer<TestClass>()));
}

class TestClass
{
public int i;
}

class TestComparer<T> : IEqualityComparer<T>
where T : TestClass
{

public int GetHashCode(T obj)
{
return obj.GetHashCode();
}

public bool Equals(T t1, T t2)
{
return t1.i == t2.i;
}
}
wuyq11 2009-03-03
  • 打赏
  • 举报
回复
list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,加入list中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,那么list.contains(o)返回true,否则返回false。

111,126

社区成员

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

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

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