所以 - 我仍然无法弄清楚为什么这一行:
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;
答案 0 :(得分:0)
变化:
if (strDelim == null)
strDelim = new string[] { "." };
为:
if (strDelim == null || !strDelim.Any())
strDelim = new string[] { "." };
if (strIn == null)
strIn = new List<string>();
这有帮助吗?
老实说,如果变量名不是temp的所有派生,那将会有很大帮助 - 这使得很难弄清楚代码甚至试图做什么......