【问题标题】:Why getting ArgumentOutOfRangeException in finding substring为什么在查找子字符串时遇到 ArgumentOutOfRangeException
【发布时间】:2016-12-30 07:19:37
【问题描述】:

clines[i] 的长度是 69 我已经初始化index = 50

代码:

string substr = clines[i].Substring(index, clines[i].Length);

现在我想要从索引 5069 的子字符串 但我得到了例外

ArgumentOutOfRangeException:索引和长度必须引用一个位置 字符串内。参数名称:长度

为什么会出现这个异常?

【问题讨论】:

  • Substring 不是(from, to)。这是(from, howmany) 阅读实际文档可能会回答你,而不是创建这个问题。

标签: c#


【解决方案1】:

代码中错误的直接原因是index + clines[i].Length 不能超过实际字符串的长度,即clines[i].Length,这就是为什么每个非零@987654324 都会出现错误的原因@。

尝试删除最后一个参数(如果你想得到从index开始的子字符串,一直到结尾):

 string substr = clines[i].Substring(index);

编辑:带有两个参数的(冗长的)替代方案是

 string substr = clines[i].Substring(index, clines[i].Length - index);

请注意最后一个参数是子字符串的长度,而不是原来的长度。

【讨论】:

  • string substr = clines[i].Substring(index);这行得通。但是我在 substring() 中有一个问题,我们不必传递最后一个索引?为什么?
  • @Surabhi Pandey:你可以把它写成string substr = clines[i].Substring(index, clines[i].Length - index);,但是当你有一个 sutable 方法的重载时,为什么还要麻烦最后一个参数呢?既然.Net提供了Substrting(index)方法,意思是“从index开始直到结束”,我们为什么不用它呢?
  • @DmitryBychenko 感谢您的纠正。删除了我的评论。
  • @DmitryBychenko- 谢谢 :)
【解决方案2】:

在 C# 中,第二个参数表示您想要获取的段的长度,而不是您希望段延伸到的索引。

另外,如果你想要字符串的正确部分——你可以省略第二个参数。

clines[i].Substring(50, 19);

【讨论】:

  • 是的,我现在明白了。我是 c# 的新手。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2011-07-13
相关资源
最近更新 更多