1

次のようにリスト ボックスに項目を追加します。

foreach(myObject object in ListOfObjects)
{
    mylistbox1.add(object);
}

foreach(myObject object in ListOfObjectsTwo)
{
    mylistbox2.add(object);
}

さらに、特定の条件でいくつかのアイテムを削除したいと考えています。これが私がすることです:

foreach(myObject object in ListOfObjects3)
{
    mylistbox1.items.remove(object);
    mylistbox2.items.remove(object);
}

これは でのみ機能するようですが、 では機能しmylistbox1ませんmylistbox2。デバッグすると、アイテムがそこにあり、削除しようとしているものとまったく同じプロパティを持っていることがわかります。リストボックスに削除しようとしている項目が含まれているかどうかを確認しようとすると、false が返されます。

私はそれを理解できないようです。

4

1 に答える 1

3

Equalsオブジェクトの使用またはメソッドを比較するために何らかの方法で必要なすべてのリスト操作を c# しますGetHashCode。あなたの場合Equals、デフォルトの実装はプロパティ値をチェックせず、引数として渡されたオブジェクトがリストにあるかどうかのみを確認するため、リストに同じインスタンスがあるか、たまたま同じプロパティを持つ2つの異なるインスタンスがあるかを検討してください。(便利なVSオプションはmake object id、インスタンスを番号でマークすることです)

この場合は、Equalsメソッドのオーバーライドを検討するか、たとえば削除するインスタンスを見つけて、linqそのオブジェクトをRemoveメソッドに渡す必要があります。

于 2013-07-18T20:04:49.823 に答える