System.ArgumentOutOfRangeException:startIndex不能大于string的长度

时间:2012-03-21 21:19:07

标签: c# asp.net-mvc

我有这个代码。我试图只检索文本“第一个程序”。考虑到我知道索引说25并且字符串的总长度是35。

string text="Hello world ! This is my first program";

Response.Write(text.SubString(25,35));

但我在运行时遇到错误“System.ArgumentOutOfRangeException:startIndex不能大于字符串的长度”

5 个答案:

答案 0 :(得分:14)

String.Substring的参数是:

public string Substring(
    int startIndex,
    int length
)

你试图在第26个字符(startIndex从零开始)之后取<35>个,这超出了范围。

如果您只是想从第25个字符到字符串末尾,请使用text.SubString(24)

答案 1 :(得分:4)

string.Substring()的第二个参数是长度,而不是结束偏移:

Response.Write(text.Substring(25,10));

答案 2 :(得分:0)

Substring的第二个参数是您希望子字符串的长度,而不是子字符串的终点。 25 + 35超出原始字符串的范围,因此会引发异常。

答案 3 :(得分:0)

SubString的第二个参数是子字符串中的字符数。

更简单的方法。

    int startIndex=25; // find out startIndex
    int endIndex=35;   // find out endIndex, in this case it is text.Length;
    int length= endIndex - startIndex; // always subtract startIndex from the position wherever you want your substring to end i.e. endIndex
    // call substring
    Response.Write(text.Substring(startIndex,length));     

您可以执行某些操作或调用函数来获取开始/结束索引值。使用这种方法,您不太可能遇到与索引相关的任何问题。

答案 4 :(得分:0)

在此期间,您可以使用

(LINQ ElementAt)(ElementAtOrDefault)方法。但是,当指定的索引是负值或不小于序列的大小时, ElementAt 扩展方法会抛出 System.ArguementOutOfRangeException