我有一个类“ 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”的对象。
请注意:我没有采用简单的字符串列表或字符串形式,因为我想以简单的方式解释我的列表,类和对象的大问题。
使用Any()
方法:
if (!lstClass1.Any(x => x.sText == "text1"))
lstClass1.Add(new Class1("text1"));
这段代码:
if (!lstClass1.Contains(new Class1("text1")))
lstClass1.Add(new Class1("text1"));
仅当您提供Equals()
和GetHashCode()
方法Class1
以允许在此类的两个对象之间进行比较时,该方法才有效。为此,您的类应实现IEquatable
接口。所以您的Class1可能看起来像这样:
public class Class1 : IEquatable<Class1>
{
public Class1(string sText)
{
this.sText = sText;
}
public string sText = "";
public bool Equals(Class1 other)
{
if (other == null)
return false;
if (this.sText == other.sText)
return true;
else
return false;
}
public override int GetHashCode()
{
return this.sText.GetHashCode();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句