【发布时间】:2014-02-07 10:14:09
【问题描述】:
我有一个类“Class1”,它在 .NET 2.0 中有一个字符串变量“sText”。我已经创建了该类“lstClass1”的对象列表。在设置了它的字符串变量后,它存储了该类的许多对象。
完整代码为:
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 方法的实现?
-
不确定为什么不将
new Class1("text1")存储到新的Class1类型变量中,顺便说一句。没有必要构建它两次。只需构造一次,在变量上检查,然后从变量中存储。