神秘的IndexOutOfRangeException

时间:2014-09-16 01:56:26

标签: c# split trim indexoutofrangeexception

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

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

这是一种奇怪的方式,但我测试了一些我自己的样本输入,并且在预期的情况下它可以正常工作。

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

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

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