private void button1_Click(object sender, EventArgs e)
{
if (!listBox.Items.Exists) // Random Idea which doesnt work
{
listBox2.Items.Add(listBox1.Items[listBox1.SelectedIndex]);
}
}
这实际上会起作用,但是您需要使用该Contains
方法。但是,您可能错过了一个关键点。
您使用什么类型的项目来填充您的ListBox
? Exists
默认情况下,将调用.Equals
which 使用引用相等。因此,如果您需要根据值进行过滤,则需要覆盖.Equals
您的类型并更改语义。
例如:
class Foo
{
public string Name { get; set; }
public Foo(string name)
{
Name = name;
}
}
class Program
{
static void Main( string[] args )
{
var x = new Foo("ed");
var y = new Foo("ed");
Console.WriteLine(x.Equals(y)); // prints "False"
}
}
但是,如果我们重写.Equals
以提供值类型语义......
class Foo
{
public string Name { get; set; }
public Foo(string name)
{
Name = name;
}
public override bool Equals(object obj)
{
// error and type checking go here!
return ((Foo)obj).Name == this.Name;
}
// should override GetHashCode as well
}
class Program
{
static void Main( string[] args )
{
var x = new Foo("ed");
var y = new Foo("ed");
Console.WriteLine(x.Equals(y)); // prints "True"
Console.Read();
}
}
现在您的呼叫if(!listBox.Items.Contains(item))
将按您的预期工作。但是,如果您希望它继续工作,您需要将该项目添加到两个列表框,而不仅仅是listBox2
.