我在起始索引上有一个子字符串错误

时间:2011-12-28 03:57:54

标签: c# asp.net

我一直在我的应用中收到此错误 这个代码假设工作有多简单的小片段

String lang = "Language.en-US".ToString();
appPath.Text = lang.Substring(2, lang.Length);//

错误

System.ArgumentOutOfRangeException: 
Index and length must refer to a location within the string

我每次更改起始索引时都会收到错误但如果我将其设置为0则可以正常工作,但是我无法将起始索引更改为高于零的数字是否可以下载任何内容,例如更新以修复此问题我确定我的系统在使用.Net 4.0时出错了。

6 个答案:

答案 0 :(得分:5)

您应该将其更改为

appPath.Text = lang.Substring(2, lang.Length - 2);

基本上根据Substring方法文档

public string Substring(
    int startIndex,
    int length
)

startIndex + length应小于字符串长度。

如果您总是希望从第二个位置到最后一个位置获取字符串,则应使用 Substring 的重载版本

public string Substring(
    int startIndex
)

答案 1 :(得分:3)

问题在于,当你将lang.Length作为从索引2中提取的字符串长度时,范围将超出字符串。

应该是

lang.Substring(2, lang.Length - 2);

答案 2 :(得分:3)

Substring接受两个参数,第一个( startIndex )是从哪里开始,它应该是一个介于0和该字符串长度之间的数字( length );第二个是这个子串的长度,它应该在0和 length-startIndex 之间

答案 3 :(得分:2)

lang.Length - 1 它基于零,因此您的长度将超过索引

答案 4 :(得分:1)

我相信第一个参数是起始位置,第二个参数是要采用的字符数。因为你是从第二个位置开始的,所以如果你使用lang.Length字符,那么你将超出字符串的范围。

答案 5 :(得分:1)

以下大部分答案似乎都是正确的(请参阅@parapura rajkumar回答)。

但在你的情况下,更好的选择是看看

String.Substring Method (Int32)

看到你需要整个字符串的剩余部分