Considérez les points suivants:
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
}
}
}
4 Réponses :
parce que "a"! = "A" code>. Au moins, pas toujours. P>
contient () code> vérifiera les adresses de mémoire, pas le contenu réel. Vous ne pouvez pas insérer le même objet deux fois, et "A" code> n'est pas le même objet que "A" code> (au moins, pas ici). P>
Je voudrais probablement itération à travers toutes les valeurs et vérifier si elles sont égales. Mais je ne suis pas un programmeur C #, il pourrait donc y avoir un moyen plus facile.
Vous devez informer sur le comparateur: p>
in EqualitComParrer.Default Property Vous pouvez voir un exemple. < / p>
Parce que vous avez ajouté cette valeur définie sur CX:
cY.Add(new Bind { x = "a", y = "1" });
La méthode 'contient' utilise les égaux sur l'objet, ce qui vérifie simplement que les adresses de mémoire sont différentes.
envisagez de changer votre classe sur cette ... p>
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;
}
}