子串的空例外错误

时间:2013-07-15 16:25:06

标签: c# substring nullreferenceexception

我收到Null Reference异常错误,它与substring函数或LastIndex函数有关。我很困惑为什么

          String[] m_SessionNames;
          String[] filenames; //Filenames already initialized in code
          int Index = 0;
                foreach (String name in filenames)
                {
                    MessageBox.Show(filenames[index]) //Works, Displays a string that includes a '\'
                    m_SessionNames[Index] = filenames[Index].Substring((filenames[Index].LastIndexOf('\\') > 0) ? filenames[Index].LastIndexOf('\\') + 1 : 0);
                    Index++;                                                                                                                                                        
                }

3 个答案:

答案 0 :(得分:2)

您说m_SessionNames和文件名都已初始化。

如果是这种情况你不应该

String [] m_SessionNames; String [] filenames;

在您的代码之上。

它们被初始化的地方?即使它们可能在其他地方初始化,你在这里声明了2个未初始化的新阵列。

如果在函数内部使用此代码,则在类级别声明m_SessionNames和文件名,然后填充它们。然后在这个函数中你不需要再次声明它们。

答案 1 :(得分:1)

看起来你正试图从路径中获取文件名。

幸运的是,已有一种方法:Path.GetFileName

var m_SessionNames = new List<string>();

for (int i = 0; i < filenames.Length; i++)
{
    var filename = filenames[i];

    if (string.IsNullOrWhiteSpace(filename))
    {
        MessageBox.Show("filename is null");
        continue;
    }

    MessageBox.Show(filename);

    m_SessionNames.Add(Path.GetFileName(filename));
}

return m_SessionNames.ToArray();

这是使用Linq的更简洁的方法。

// Get all valid filenames
var sessionNames = filenames.Select(Path.GetFileName)
                            .Where(f => !string.IsNullOrWhiteSpace(f));

m_SessionNames = sessionNames.ToArray();

答案 2 :(得分:0)

似乎是filenames[Index]为空。因此,如果您在filenames[Index]上调用任何方法,它可能会产生NullPointerException。如果文件名已在代码中初始化,则原因可以是m_SessionNames[Index],并且可以将其评估为null。这是因为我们看不到m_SessionNames没有在代码中的任何地方初始化