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、lbEven 和 lbOdd 是 ListBoxes,您似乎正在尝试将 ListBoxItem 转换为 int。我很惊讶这甚至可以编译,因为 Items 集合的 Add() 方法需要一个新的 ListBoxItem 或一个字符串,而不是一个 int。您将不得不发布更多信息。话虽如此,使用模运算符的基本逻辑是正确的,您只是试图将输出填充到错误的东西中。你想如何显示你的输出?

于 2012-10-26T01:01:19.540 回答
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.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 回答