返回的字符串引用值为null

本文关键字:null 引用 字符串 返回 | 更新日期: 2023-09-27 18:30:08

我有一个愚蠢的错误,我无法处理。

我使用一个字符串来检查文件夹的名称及其扩展类型。我这样做是为了在文件夹之间导航。这适用于我的第一个文件夹选择,但是,当我尝试点击第二个文件夹时,我会得到null引用异常。

这就是我现在所拥有的。

 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);

然而,当我单击列表框中的一个项目时,它是使用的第一组代码,并且是在sepearate方法中。

返回的字符串引用值为null

如果您正在处理SelectedIndexChanged事件,您需要处理它为null的情况,因为在某些情况下它不会被设置。

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

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

不确定这是否是一个错误。。但我以前也遇到过这种情况。

问题是,SelectedItemSelectedIndexChanged事件期间并不总是可用。。或者有时根本没有。

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

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

还有,当你在那里的时候。。您可以在System.IO中使用File.GetExtension方法来获得扩展(而不是自己做):

using System.IO;
string extension = File.GetExtension(clickObject);