在线等——索引超出范围。必须为非负值并小于集合大小。 参数名: startIndex

消失的尘芥 2011-10-13 11:35:53
错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: startIndex
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: startIndex

源错误:

行 1376: {
行 1377: // TODO: 在此处添加构造函数逻辑
行 1378: if (SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
行 1379: SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上分隔符号
行 1380: while (SourceStr.IndexOf(SeparatorStr) >= 0)


源文件: D:\erpclub4\Components\Components\Components\Systems\DataManage.cs 行: 1378




页面代码为:

************************************************************/
public StringList(string SourceStr, string SeparatorStr)
{
// TODO: 在此处添加构造函数逻辑
if (SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上分隔符号

运行完if就报上面的错误,
我单步调试里面的值为 SeparatorStr=="," SourceStr.Length - 1 ==“-1”
求前辈指点
...全文
603 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
说多了
  • 打赏
  • 举报
回复
的这个方法什么没有返回值类型?即使不返回什么,也要带个void关键字啊
例如
public void StringList(string SourceStr, string SeparatorStr)
{

。。。。。。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lifetimeus 的回复:]
引用 9 楼 hhqsy 的回复:

如果参数传null值进来,你程序也会挂掉。。。。

这样啊.哎,那麻烦了,找了半天错误头都大了
[/Quote]
验证不通过,就直接return跳出来,当然你也可以返回相关信息。

public StringList(string SourceStr, string SeparatorStr)
{
// TODO: 在此处添加构造函数逻辑
if(SourceStr==null||SeparatorStr==null)
return;
if(SourceStr.Length<1)
return;
if (SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上分隔符号
}


cento123 2011-10-13
  • 打赏
  • 举报
回复

if (string.IsNullOrEmpty(SourceStr)) return;//========>

....
chinacoding 2011-10-13
  • 打赏
  • 举报
回复
很简单,SourceStr.Length == 0
那SourceStr.Length - 1 = -1了

参数是null的话 直接报内存bug了
Sing-Z 2011-10-13
  • 打赏
  • 举报
回复
哈哈,null值绝对挂。。
_天空之城 2011-10-13
  • 打赏
  • 举报
回复
接分啦。。。
消失的尘芥 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hhqsy 的回复:]

如果参数传null值进来,你程序也会挂掉。。。。
[/Quote]
这样啊.哎,那麻烦了,找了半天错误头都大了
  • 打赏
  • 举报
回复
如果参数传null值进来,你程序也会挂掉。。。。
  • 打赏
  • 举报
回复
非负。。。。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lifetimeus 的回复:]
引用 4 楼 dalmeeme 的回复:

SourceStr的值可能出现空串,长度为零,所以减去一后就为负值了。
可以改成:
if (SourceStr.Length>0&amp;&amp;SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字……
[/Quote]
SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1)
微软规定的,没办法啊。索引从0开始。。。。
消失的尘芥 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dalmeeme 的回复:]

SourceStr的值可能出现空串,长度为零,所以减去一后就为负值了。
可以改成:
if (SourceStr.Length>0&&SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上……
[/Quote]

这个改了后错误排除了,不知道会不会影响后面的代码。因为之前的项目中,就是没加大于零的判断,但是运行成功了。小妹有点疑惑,SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1)
这个里面的值为什么不能是负值?如-1
md5e 2011-10-13
  • 打赏
  • 举报
回复
if (SourceStr.Length > SeparatorStr.Length && SourceStr.IndexOf(SeparatorStr, SourceStr.Length - SeparatorStr.Length) <= 0)
dalmeeme 2011-10-13
  • 打赏
  • 举报
回复
SourceStr的值可能出现空串,长度为零,所以减去一后就为负值了。
可以改成:
if (SourceStr.Length>0&&SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上
md5e 2011-10-13
  • 打赏
  • 举报
回复
if (SourceStr.Length > SeparatorStr.Length || SourceStr.IndexOf(SeparatorStr, SourceStr.Length - SeparatorStr.Length) <= 0)
  • 打赏
  • 举报
回复
注意到处可能有bug,

public StringList(string SourceStr, string SeparatorStr)
{
// TODO: 在此处添加构造函数逻辑
if(SourceStr==null||SeparatorStr==null)
return;
if(SourceStr.Length<1)
return;
if (SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上分隔符号
}



  • 打赏
  • 举报
回复

public StringList(string SourceStr, string SeparatorStr)
{
// TODO: 在此处添加构造函数逻辑
if(SourceStr.Length<1)
return;
if (SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1) <= 0)
SourceStr += SeparatorStr;//如果字符串的末尾没有分隔符号,应加上分隔符号



CalvinR 2011-10-13
  • 打赏
  • 举报
回复
非负这是微软的死理
消失的尘芥 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hhqsy 的回复:]

说多了
[/Quote]
嘿嘿,不多,非常感谢各位的评论
梦纷飞舞 2011-10-13
  • 打赏
  • 举报
回复
你要判断下你要截取的开始索引要小于字符串长度!!!否则会爆超出索引的!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧