错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: 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”
求前辈指点

解决方案 »

  1.   


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

  2.   

    注意到处可能有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;//如果字符串的末尾没有分隔符号,应加上分隔符号
              }
      

  3.   

    if (SourceStr.Length > SeparatorStr.Length || SourceStr.IndexOf(SeparatorStr, SourceStr.Length - SeparatorStr.Length) <= 0)
      

  4.   

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

  5.   

    if (SourceStr.Length > SeparatorStr.Length && SourceStr.IndexOf(SeparatorStr, SourceStr.Length - SeparatorStr.Length) <= 0)
      

  6.   


    这个改了后错误排除了,不知道会不会影响后面的代码。因为之前的项目中,就是没加大于零的判断,但是运行成功了。小妹有点疑惑,SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1)
    这个里面的值为什么不能是负值?如-1
      

  7.   

    SourceStr.IndexOf(SeparatorStr, SourceStr.Length - 1)
    微软规定的,没办法啊。索引从0开始。
      

  8.   

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

  9.   

    很简单,SourceStr.Length == 0
    那SourceStr.Length  - 1 = -1了

    参数是null的话 直接报内存bug了
      

  10.   


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

  11.   

    验证不通过,就直接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;//如果字符串的末尾没有分隔符号,应加上分隔符号
              }
      

  12.   

    的这个方法什么没有返回值类型?即使不返回什么,也要带个void关键字啊
    例如
    public void StringList(string SourceStr, string SeparatorStr)
    {