【问题标题】:mysterious IndexOutOfRangeException神秘的 IndexOutOfRangeException
【发布时间】:2014-09-16 01:56:25
【问题描述】:

Visual Studio 在这个函数中抛出一个 IndexOutOfRangeException:

public static string ExtractString(string path, string startString, char endChar)
{
    string content = File.ReadAllText(path);

    /*at this line*/return content.Split(new string[] { startString }, StringSplitOptions.None)[1].Split(endChar)[0].Trim();
}

知道我在这里做错了什么吗?

【问题讨论】:

  • 异常是直截了当的。您正在访问的索引不可用或不存在或超过数组的长度。
  • 与其沮丧地举手,不如找出错误所在。将代码分成多行,每行做一件事,而不是单行做所有事情。然后根据问题所在的行很容易看出问题出在哪里。

标签: c# split trim indexoutofrangeexception


【解决方案1】:

这是一种奇怪的做法,但我使用自己的一些示例输入进行了测试,在预期的情况下它可以正常工作。

当找不到startString 时会出现问题,因为第一个string.Split 的结果数组将包含单个元素(原始输入字符串)。当您尝试拆分 endChar 上的第二个元素时,找不到第二个元素,这是您的例外。

我确信有更优雅的方法可以做到这一点,但这将完成这项工作,如果找不到 startStringendChar,则返回 null

public static string ExtractString(string content, string startString, char endChar)
{
    int i, j;

    i = content.IndexOf(startString);

    if (i == -1)
        return null;
    else
        i += startString.Length; // Start at char after startString

    j = content.IndexOf(endChar);

    if (j == -1)
        return null;

    return content.Substring(i, j - i);
}

【讨论】:

  • 谢谢,如果没有您的提示,我永远不会很快再次检查文本文件。内容不知何故被删除。显然错误现在消失了,我修复了文件。并感谢您重新安排的功能。
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2014-07-25
  • 2014-06-05
  • 2018-11-28
  • 2010-11-12
  • 2022-01-13
相关资源
最近更新 更多