奇数:索引越界,在创建中(非赋值)

时间:2017-06-01 14:37:33

标签: c# iis recursion

所以 - 我仍然无法弄清楚为什么这一行:

List<string> strTemp = new List<string>();

会抛出此错误:

  

索引超出了数组的范围。

某些上下文:递归函数,从(在Web服务(IIS)的单独线程中启动的函数调用(最初)。

另外 - 为了避免太多跳入&#34;也许你正在看错线......&#34; - 不。容易确认。每次部署都会移动行,移动错误。

哦 - 并且为了记录 - 并非总是如此,它偶尔会出现(它们非常有趣)。 从我在事件日志中看到的,没有问题&#34;周围&#34;标记的时间表示任何复杂的因素。

编辑:以下评论的一些细节。 公共服务班:SuperCloud
queuer的公共课:PHQ
公共功能(从服务中调用):void OnStop()
公共函数导致错误:(从decl剪切到有问题的行)

    public string CoalesceStrings(List<string> strIn, string[] strDelim = null)
    {
        string strReturn;
        List<string> strTempReturn;
        List<string> strTemp = new List<string>(); //<== error here!
        string[][] strTemp2;
        int iCount, iCap = int.MaxValue;

        if (strDelim == null)
            strDelim = new string[] { "." };

        iCount = strIn.Count;
        strTemp2 = new string[iCount][];

        for (int i = 0; i < iCount; i++)
        {
            strTemp2[i] = strIn[i].Split(strDelim, StringSplitOptions.None);
            if (strTemp2[i].Length < iCap)
                iCap = strTemp2[i].Length;
        }

        strTempReturn = new List<string>();
        if (strDelim[0] == ".")
            --iCap;

        for (int i = 0; i < iCap; i++)
        {
            bool bMatch = true;
            strTemp.Clear();
            strTemp.Add( strTemp2[0][i] );

            for (int j = 1; j < iCount; j++)
            {
                strTemp.Add(strTemp2[j][i]);
                if (bMatch && (strTemp2[j][i] != strTemp2[0][i]))
                    bMatch = false;
            }

            if (bMatch)
                strTempReturn.Add(strTemp2[0][i]);
            else if (strDelim[0] == "." )
                strTempReturn.Add( CoalesceStrings( strTemp, new string [] {"_"} ));
        }

        if (strDelim[0] == ".")
            strTempReturn.Add(strTemp2[0][strTemp2[0].Length - 1]);

        if (strTempReturn.Count == 0)
            strReturn = "";
        else
        {
            strReturn = strTempReturn[0];

            for (int i = 1; i < strTempReturn.Count; i++)
                strReturn = string.Concat(strReturn, strDelim[0], strTempReturn[i]);
        }

        return strReturn;
    }

编辑:为mjwillis添加了全部功能 call:CoalesceStrings(strFileName);

基本上:该函数将采用一组源自单个文件的文件,这些文件根据未知算法进行拆分,并且&#34; unsplit&#34;它,获取原始文件名。逻辑本身有效(它不会抛出错误的时间)。

例如: 输入:{&#34; foo.bar.1.1.prelim&#34;,&#34; foo.bar.1.1.final&#34;,&#34; foo.bar.1.2.prelim&#34;,.. 。,&#34; foo.bar.4.5.final&#34; } 输出:&#34; foo.bar&#34;

1 个答案:

答案 0 :(得分:0)

变化:

    if (strDelim == null)
        strDelim = new string[] { "." };

为:

    if (strDelim == null || !strDelim.Any())
        strDelim = new string[] { "." };

    if (strIn == null)
        strIn = new List<string>();

这有帮助吗?

老实说,如果变量名不是temp的所有派生,那将会有很大帮助 - 这使得很难弄清楚代码甚至试图做什么......