IndexOutOfRange exception

本文关键字:exception IndexOutOfRange | 更新日期: 2023-09-27 17:50:46

为什么会出现IndexOutOfRange异常?

string[] achCheckStr = File.ReadAllLines("achievements.txt");
if (achCheckStr[0] == ach1_StillBurning) // this is where the exception occurs
{
    setAchievements(1);
}
if (achCheckStr[1] == ach2_Faster)
{
    setAchievements(2);
}

IndexOutOfRange exception

问题1:

可能不存在名称为achievements.txt的文件。语句string[] achCheckStr = File.ReadAllLines("achievements.txt");可能返回null

解决方案1:所以在访问任何文件之前,请使用File.Exists()方法检查文件是否存在

问题2:文本文件中可能没有行。

解决方案2:在访问包含行的字符串数组之前,请通过检查其Length

确保它不是空的

试试这个:

if(File.Exists("achievements.txt"))
{
    string[] achCheckStr = File.ReadAllLines("achievements.txt");
    if(achCheckStr.Length > 0)
    {
        if (achCheckStr[0] == ach1_StillBurning) 
        {
            setAchievements(1);
        }
        if (achCheckStr[1] == ach2_Faster)
        {
            setAchievements(2);
        }
    }
}

您的代码假设achCheckStr数组至少有2个元素,而没有首先检查有多少个元素。如果文件存在&内容为空,achCheckStr.Length将为0,IndexOutOfRangeException将恰好在发生的地方被抛出。

你把"achievement .txt"存放在哪里?它可能在错误的位置,所以代码无法找到它。

您可以完全限定路径或将文件放在生成.exe的bin目录中。

有个办法

string[] achCheckStr = File.ReadAllLines("achievements.txt");
        if (achCheckStr != null && achCheckStr.Any())
        {
            if (achCheckStr[0] == ach1_StillBurning) // this is where the exception occurs
            {
                setAchievements(1);
            }
            if (achCheckStr[1] == ach2_Faster)
            {
                setAchievements(2);
            }
        }