0

これはコードです:

for (int i = 0; i < lightningsRegions.Count; i++)
{
    if (!pdf1.Lightnings.Contains(lightningsRegions[i]))
    {
        pdf1.Lightnings.Add(lightningsRegions[i]);
        break;
    }
}

Lists LightningsRegions と Lightnings はどちらもタイプです。LightningsRegions がすでに Lightnings に存在するかどうかを確認したいので、再度追加しないでください。しかし、私は pdf1.Lightnings.Add(lightningsRegions[i]); でブレークポインを使用しました。それはそこに行き続け、私が選んだのと同じインデックスを追加します。

私のプログラムには新しいフォームがあります。たとえば、新しいフォームに表示される多くの範囲の数値から選択できます。Lightning 0 Length 32 [41 - 73] これをクリックすると、ブレークポイントに移動して追加します一度ライトニングリストに。

だから今、インデックス[0]のライトニングリストに私は持っています:「ライトニング0長さ32 [41 - 73]」今、同じメニューでこのライトニング0長さ32 [41 - 73]をクリックすると、それは行かないはずですそれをライトニングリストに追加しますが、そうします。

この新しいフォーム メニューには、次のような多くの文字列があります: Lightning 0 Length 32 [41 - 73] しかし、2 回クリックすると 1 回だけ追加され、別のものをクリックすると追加されないことを確認したい同じように追加します。

しかし、何らかの理由で2回クリックすると、同じブレークポイントになり、もう一度追加します。

更新しました:

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if (listBox1.SelectedItem != null)
            {
                item = listBox1.SelectedItem.ToString();
                this.f1.PlayLightnings();
                f1.pdftoolsmenu();
            }
        }

これは、項目を選択する新しいフォームの listBox1 です。だから私はそれをクリックするか、同じアイテムの上に移動して選択した場合、同じアイテムではなく、他のアイテムではなく、ライトニングリストに追加されないようにしたいと思います!! ライトニングリストにないアイテムに移動またはクリックした場合にのみ追加してください!

4

2 に答える 2

1

Enumerable.Anyを使用できます

var result = pdf1.Lightnings.Any(c=>lightningsRegions.Contains(c));
于 2012-12-25T16:30:45.663 に答える
0

Contains を使用する場合、チェック対象のインスタンスが実際にリストに含まれているかどうかを判断するために Equality が使用されますが、値の型ではなく参照型を比較している場合、Equality は同じ動作をしません。

したがって、Contains を使用する代わりに、Linq 拡張メソッド Any() を使用し、パラメーターとして指定されたデリゲート メソッドに関連するフィールドを配置してみてください。


私が言っていることが実際に正しいことを確認するには、デバッグ時に確認できます。リストには既にコードを検索しているものが含まれていても、新しいインスタンスが追加されますが、これは重複していますが、インスタンスが進むにつれてメモリ内の同じ領域を指していない限り、それらは等しくありません。


したがって、たとえば lightningRegion.Text ("Length 32 [41 - 73]") が 2 回追加されていないことが重要な場合は、If 句のチェックで次のように指定します。

if (!pdf1.Lightnings.Any(lightningRegion => lightningRegion.Text == lightningRegions[i].Text)
{
}
于 2012-12-25T16:32:36.377 に答える