none
foreach 的问题 RRS feed

  • 问题

  • 以下代码, 当点击按钮时会出现:"System.NullReferenceException" 类型的未经处理的异常出现在 ... 其他信息:未将对象引用设置到对象的实例.
    但是如果把listBox1.Items.Remove(a);这条语句放到foreach的外面,就没问题.
    这是为什么,如果我想把它放到foreach里面,怎么改.
    谢谢.
    private void button2_Click(object sender, EventArgs e)
        {string a=null;
          Process[] MyProcesses = Process.GetProcesses();
          foreach (Process p in MyProcesses)
          {
            
            if (p.ProcessName == listBox1.SelectedItem.ToString())
            {
              p.Kill();
              a = p.ProcessName;
              listBox1.Items.Remove(a);<br/>
            }
          }
        }
    

    2010年11月24日 5:06

答案

  • 您好

    提供您另外一種寫法

          if (listBox1.SelectedItems.Count > 0)
          {
            Process[] process = Process.GetProcessesByName(listBox1.SelectedItem.ToString());
            foreach (Process p in process)
            {
              p.Kill();
            }
            listBox1.Items.Remove(listBox1.SelectedItem);
          }
    

    歡迎參觀我的Blog.NET菜鳥自救會
    • 已标记为答案 a48625a 2010年11月24日 15:18
    2010年11月24日 6:31
  • 你好!

    这是由于你第一次删除后第二访问时 ListBox 的 SelectedItem 为 null 造在的。

    按你的代码看你应该是单选则在 remove 后加上一句 break 退出循环。


    知识改变命运,奋斗成就人生!
    • 已标记为答案 a48625a 2010年11月24日 15:24
    2010年11月24日 5:26
    版主

全部回复

  • 你好!

    这是由于你第一次删除后第二访问时 ListBox 的 SelectedItem 为 null 造在的。

    按你的代码看你应该是单选则在 remove 后加上一句 break 退出循环。


    知识改变命运,奋斗成就人生!
    • 已标记为答案 a48625a 2010年11月24日 15:24
    2010年11月24日 5:26
    版主
  • 您好

    提供您另外一種寫法

          if (listBox1.SelectedItems.Count > 0)
          {
            Process[] process = Process.GetProcessesByName(listBox1.SelectedItem.ToString());
            foreach (Process p in process)
            {
              p.Kill();
            }
            listBox1.Items.Remove(listBox1.SelectedItem);
          }
    

    歡迎參觀我的Blog.NET菜鳥自救會
    • 已标记为答案 a48625a 2010年11月24日 15:18
    2010年11月24日 6:31
  • 我认为你可以在kill之后重新load Process到listbox中,有些process你认为kill掉了,但不一定真的被kill掉,所以我认为重新load会比较好
    平凡的男孩
    2010年11月24日 7:07