うまく使いこなせる方法foreachの方法の代わりに方法witnの除去方法listbox?

StackOverflow https://stackoverflow.com/questions/720625

  •  23-08-2019
  •  | 
  •  

質問

うまく使いこなせる方法 の方法の代わりに ?

最初の(ウェブユーザー制御)

   public void Remove()
        {

            int count = this.ListBox1.Items.Count;

            for (int i = count - 1; i > -1; i--)
            {
                if (ListBox1.Items[i].Selected)
                {
                    ListBox1.Items.Remove(ListBox1.Items[i]);
                }
            }
        }

テストです。aspx(試験)

  protected void btnRemove_Click(object sender, EventArgs e)
        {
            ItemOrderer2.Remove();

        }

(ウェブユーザー制御)

 public void Remove(string value)
        {
            ListItem li = new ListItem();
            li = ListBox1.Items.FindByValue(value);
            if (li != null)
            {
                this.ListBox1.Items.Remove(li);
            }

テストです。aspx(試験秒)

  protected void btnRemove_Click(object sender, EventArgs e)
        {
           // ItemOrderer2.Remove();
            if (ItemOrderer2.Items.Count > 0)
                foreach (ListItem li in ItemOrderer2.Items)
                {
                    if (li.Selected)
                    {
                        ItemOrderer2.Remove(li.Value);
                    }
                }
        }
役に立ちましたか?

解決

あなたはforeach内のデータを削除する場合は、

あなたはforeachを使用することはできません - それは(意図的に)イテレータを破る

forが動作する場合、

、なぜそれを変更?

:例えば - あなたはforeachを使用するのの絶望的である場合、最初のの別々ののリストを作成
List<ListItem> remove = new List<ListItem>();
foreach(ListItem li in ItemOrdere2.Items) {
    if(li.Selected) remove.Add(li);
}
foreach(ListItem li in remove) {
    ItemOrderer2.Remove(li); // or similar
}

最初のクエリは、多くの場合、利用可能な場合ならばLINQによって簡略化することができます。

他のヒント

あなたは値がリストに最初に削除してからremove関数を介してそれらを実行するために取得することができます。必要であれば、これはさらに向上させることができます。

var removedValues = ItemOrderer2.Items
                    .Where(li => li.Selected)
                    .Select(li => li.Value).ToList();

foreach (var removedValue in removedValues) {
   ItemOrderer2.Remove(removedValue);
}

あなたは、foreachループで反復処理されているコレクションを変更することはできません。

言われていること、あなたがリストボックスから選択した項目を削除しようとしているようです。あなたはまた、のようなものを使用することができます:

while(ItemOrderer2.SelectedItem != null)
{
    ItemOrderer2.Items.Remove(ItemOrderer2.SelectedItem);
}

もできな変更を行えるようになり、IList<>foreachるものの、なかなかうに数を変更します。

また、第1の方法または欠陥のある、カウントを開始することができるとして、20が削除されたり10項目の方法で、カウントが20という範囲外のIList<>

基本的に除去したい場合は追加するものを繰り返し処理を行で何かをしなくてはならないように

for (int i = 0; i < ListBox1.Items.Count; i++)
{
   if (ListBox1.Items[i].Selected)
   {
      ListBox1.Items.RemoveAt(i)
      i--;
   }
}

通知のか--削除されたものです。ということか商品[2]が選択されると、ループのう:

  1. 場合の数>0を進め
  2. 合などが生じた場合は[0]を選択すると、を削除することができます(まない)
  3. 値が当社カウンター
  4. 場合はカウント>1行
  5. 合などが生じた場合は[1]を選択すると、を削除することができます(まない)
  6. 値が当社カウンター
  7. 場合の数>2進
  8. 項目[2]を選択すると、を削除することができます(す)
  9. 除項目[2](などから持ち直している"というた【3】商品[2]
  10. 減当社のカウンター
  11. 値が当社カウンター
  12. 場合の数>2進
  13. ...

武器agiは、dexで下がらないboxerぐ:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top