我收到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++;
}
答案 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没有在代码中的任何地方初始化