gpt4 book ai didi

c# - ObservableCollection.Contains() 无法正常工作

转载 作者:太空狗 更新时间:2023-10-29 22:04:15 26 4
gpt4 key购买 nike

考虑以下几点:

class Bind
{
public string x { get; set; }
public string y { get; set; }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
ObservableCollection<Bind> cX = new ObservableCollection<Bind>();
ObservableCollection<Bind> cY = new ObservableCollection<Bind>();
cX.Add(new Bind { x = "a", y = "1" });
cX.Add(new Bind { x = "b", y = "2" });
cY.Add(new Bind { x = "a", y = "1" });
foreach (var i in cX)
{
if (!cY.Contains(i)) { lv.Items.Add(i); } //lv is a ListView control
}
}
}

为什么要将 x = "a", y = "1" 添加到 ListView

如果我将 ObservableCollection 更改为 ListCollection,它会执行相同的操作。

最佳答案

'Contains' 方法在对象上使用 Equals,这只是检查内存地址是否不同。

考虑将您的类(class)更改为此...

 class Bind : IEquatable<Bind> {
public string x { get; set; }
public string y { get; set; }
public bool Equals(Bind other)
{
return x == other.x && y == other.y;
}
}

然后您的循环将访问您类中的强类型 Equals 方法,这将导致您所追求的行为。

注意:字符串类还继承自 T 的 IEquatable,这就是允许相等运算符对字符串的内容而不是字符串的地址进行操作的原因。

关于c# - ObservableCollection.Contains() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8690280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com