返回带有空引用值的字符串

时间:2013-09-03 22:41:51

标签: c# string winforms

我有一个愚蠢的错误,我无法拍摄。

我正在使用字符串来检查文件夹名称及其扩展名类型。我这样做,所以我可以在文件夹之间导航。这与我的第一个文件夹选择工作正常,但是,当我尝试单击第二个文件夹时,我得到空引用异常。

这就是我现在所拥有的。

 string clickObject = listBox1.SelectedItem.ToString();
 int index = clickObject .LastIndexOf('.');
 string extension = clickObject .Substring(index + 1, clickObject .Length - index - 1);
  if (extension == "folder")
  {
      // do stuff
   }

在此之后我只需检查我文件夹中的文件。

当我回到我的可搜索文件夹的根目录并单击另一个目录时,就是当我收到错误并突出显示行string clickObject = listBox1.SelectedItem.ToString();时。

在我设置此方法的最后,我尝试设置clickedObject = null;我尝试删除clickObject.Remove(0);中包含的字符串,但错误仍然存​​在。

如何清除clickedObject中保存的信息,以便用新信息覆盖它?

修改

抱歉忘记提及当我回到根目录时,我有一个调用此方法的按钮:

 using (var client = new WebClient())
        {
            result = client.DownloadString("http://foo.foo.com/images/getDirectoryList.php");
        }

        string[] names = result.Split('|');
        listBox1.Items.Clear();
        foreach (string name in names)
        {
            listBox1.Items.Add(name);
        }
        listBox1.Update();

        listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);

但是,当我单击列表框中的某个项目时,它是第一组使用的代码,它是一个单独的方法。

2 个答案:

答案 0 :(得分:1)

不确定这是不是一个错误..但我之前也遇到过这个问题。

问题是,在SelectedItem事件期间SelectedIndexChanged并非始终可用..或有时根本不可用。

修复方法是直接访问该项目:

string clickObject = listBox1.Items[listBox1.SelectedIndex].ToString();

此外,当你在那里时......你可以在File.GetExtension中使用System.IO方法获取扩展程序(而不是自己动手):

using System.IO;

string extension = File.GetExtension(clickObject);

答案 1 :(得分:1)

如果您正在处理SelectedIndexChanged事件,则需要处理它为空,因为有些情况下不会设置它。

因此,在您的处理程序中,在尝试将其转换为字符串之前,必须检查listBox1.SelectedItem是否为空:

if (listBox1.SelectedItem != null)
{
    // Your code
}