【问题标题】:IndexOutOfRange exception [duplicate]IndexOutOfRange 异常[重复]
【发布时间】:2014-03-18 18:20:12
【问题描述】:

为什么会出现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);
}

【问题讨论】:

  • 您是否验证过您实际上是在使用调试器获取文件的内容?
  • 在 i(achCheckStr[0] == .... 之前添加:if(achCheckStr != null)
  • 添加断点,验证achCheckStr有数据...

标签: c# arrays exception exception-handling file.readalllines


【解决方案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);
        }
    }
}

【讨论】:

    【解决方案2】:

    您的代码假设 achCheckStr 数组至少有 2 个元素,而没有先检查有多少。如果文件存在且内容为空,achCheckStr.Length 将为 0,IndexOutOfRangeException 将被准确抛出。

    【讨论】:

      【解决方案3】:

      您将“achievements.txt”存储在哪里?它可能位于错误的位置,因此代码找不到它。

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

      【讨论】:

        【解决方案4】:

        有办法

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-14
          • 1970-01-01
          • 1970-01-01
          • 2013-08-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多