我有一个在.NET 2.0中有一个字符串变量“sText”的类“Class1”。我创建了该类“lstClass1”的对象列表。它在设置字符串变量后存储该类的许多对象。List.Contains在对象比较上失败
完整代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!lstClass1.Contains(new Class1("text1")))
lstClass1.Add(new Class1("text1"));
}
public List<Class1> lstClass1 = new List<Class1>();
}
public class Class1
{
public Class1(string sText)
{
this.sText = sText;
}
public string sText = "";
}
现在的问题是,我只想补充一点,有串具有独特的文本值类对象。例如,如果lstClass1已经有一个包含字符串变量值“text1”的对象,那么它不应该允许添加也包含“text1”的对象。所以,我写代码:
if (!lstClass1.Contains(new Class1("text1")))
lstClass1.Add(new Class1("text1"));
但它总是让即使已存在与“text1”中的字符串列表中的一个对象添加文本“text1”中。我的假设是,在第一次按钮点击事件“button1_Click”时,对象将被添加,因为列表是空的,但在下一个按钮时点击List.Contains函数将检查列表中是否已经有字符串变量“text1”的对象,并且如果找到,则不会被添加。但它始终允许添加带有文本“text1”的对象,即使它已经存在于列表中。
请注意:我没有采取简单的字符串或字符串列表,因为我想用简单的方式解释列表,类和对象的大问题。
请帮忙。
您是否提供了Class1的默认Equals和GetHashCode方法的实现? – Oscar
http://stackoverflow.com/questions/10454519/best-way-to-compare-two-complex-object – k06a
不知道你为什么不把这个'新的Class1(“text1”)'存储到一个新的'Class1 '-type变量,顺便说一句。没有必要两次构建它。只需构造一次,在变量上检查它,然后从变量中存储它。 – Nyerguds