代码之家  ›  专栏  ›  技术社区  ›  Denk

Windows Mobile设备上的C#子字符串引发“超出有效范围”错误(有效范围)

  •  1
  • Denk  · 技术社区  · 6 年前

    using (StreamReader sr = new StreamReader("Flash Disk/thing.ini"))
                {
                    text = sr.ReadToEnd();
                    int length = text.Length;  //3722
                    int indexStart = text.IndexOf("DeviceName="); //3126
                    int indexEnd = text.IndexOf("DeviceID="); //3145
                    string deviceName = text.Substring(indexStart, indexEnd);
                    Console.WriteLine(name);
                }
    

    它正在爆炸

    我正在获取ArgumentOutOfRangeException,它告诉我“指定的参数超出了有效值的范围。”没有其他内容。

    1 回复  |  直到 6 年前
        1
  •  4
  •   D-Shih    6 年前

    4752

    int length = text.Length;  //4752
    

    但是 Substring

    在代码中,从 indexStart(4176) 并检索 indexEnd(4195) 这将超过字符串长度。

    我觉得你需要 indexEnd - indexStart 关于第二个参数

    int indexStart = text.IndexOf("DeviceName="); //4176
    int indexEnd = text.IndexOf("DeviceID="); //4195
    string deviceName = text.Substring(indexStart, indexEnd - indexStart);