2

ここではベースから外れているかもしれませんが、MS サイトのこのコードは、少し変更すると機能しません。申し訳ありませんが、ほぼ午前 2 時です。int にはどのような変数を指定する必要がありますか? 「指定されたキャストは無効です」というメッセージが表示されてプログラムがクラッシュします。

ArrayList OddEven = new ArrayList();

            foreach (int i in lbList.Items)
            OddEven.Add(i);
            foreach (int i in OddEven)
            {
                if (i % 2 == 0)
                    lbEven.Items.Add(i);
                else
                    lbOdd.Items.Add(i);
            }
4

4 に答える 4

1

lbList.Itemsおそらくstringsであり、への暗黙的なキャストintは存在しません。
これを試して:

ArrayList OddEven = new ArrayList();

foreach (var i in lbList.Items)
  OddEven.Add(int.Parse(i.ToString()));

foreach (int i in OddEven)
{
  if (i % 2 == 0)
    lbEven.Items.Add(i);
  else
    lbOdd.Items.Add(i);
}
于 2012-10-26T00:51:54.460 に答える
0

あなたの lbList は ListBox または DropdownList だと思います

foreach (ListItem item in lbList.Items)
{
     int i = int32.Parse(item.Text);
     if (i % 2 == 0)
        lbEven.Items.Add(i);
     else
        lbOdd.Items.Add(i);
}

アップデート

Winforms では、ListBox.Items は を返しObjectCollection、リスト内の各項目はObject

foreach (object item in lbList.Items)
{
     int i = Convert.ToInt32(item);
     if (i % 2 == 0)
        lbEven.Items.Add(i);
     else
        lbOdd.Items.Add(i);
}

あなたもできる

foreach (var item in lbList.Items)
{
     int i = Convert.ToInt32(item);
     if (i % 2 == 0)
        lbEven.Items.Add(i);
     else
        lbOdd.Items.Add(i);
}
于 2012-10-26T01:04:56.793 に答える
0

lbList、lbEven、および lbOdd が ListBoxes であると仮定すると、ListBoxItem を int にキャストしようとしているようです。Items コレクションの Add() メソッドは int ではなく、新しい ListBoxItem または文字列を受け取るため、これがコンパイルされることにも驚きました。もう少し情報を投稿する必要があります。そうは言っても、モジュロ演算子を使用した基本的なロジックは正しいです。出力を間違ったものに詰め込もうとしているだけです。出力をどのように表示しますか?

于 2012-10-26T01:01:19.540 に答える
0

これを試して、

lbList.Items.ToList<string>().ForEach(item => 
     {
        int i = Convert.ToInt32(item);
        if (i % 2 == 0)
            lbEven.Items.Add(i);
        else
            lbOdd.Items.Add(i);
    });
于 2012-10-26T01:52:43.900 に答える