我有一个List<List<DateTime>>
,我试图通过for循环设置,但是我得到IndexOutOfRangeException
,努力但是无法消除该异常。
代码如下:
protected void btnTimeStamp_Click(object sender, EventArgs e)
{
string serviceName = DropDownList1.SelectedItem.Text;
List<string> serviceNameArray = new List<string>();
for (int x = 1; x <= 40; x++)
{
if (x < 10)
{
serviceNameArray.Add(@"\\Server10" + x + @"\WebSite" + "\\" + serviceName);
}
else
{
serviceNameArray.Add(@"\\Server1" + x + @"\WebSite" + "\\" + serviceName);
}
}
List<List<string>> ultimateList = new List<List<string>>();
List<int> numList = new List<int>();
//Call the Search method
for (int y = 0; y < 40; y++)
{
ultimateList.Add(Search(serviceNameArray[y]));
}
for (int z = 0; z < 40; z++)
{
numList.Add(ultimateList[z].Count);
}
List<List<DateTime>> listOfDateTimes = new List<List<DateTime>>();
for(int xx=0;xx<40;xx++)
{
for(int yy=0;yy<numList[xx];yy++)
{
**listOfDateTimes[xx].Add(File.GetLastWriteTime(ultimateList[xx][yy]));//Index out of range exception on this line of code**
}
}
//Some more code to create a dynamic data table and stuffs
}
public List<string> Search(string path)
{
List<string> listOfFiles = new List<string>();
try
{
foreach (string files in Directory.GetFiles(path))
{
listOfFiles.Add(files);
}
foreach (string dirs in Directory.GetDirectories(path))
{
listOfFiles.AddRange(Search(dirs));
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
return listOfFiles;
}
代码摘要是这样的,我需要获取大约40个共享位置的文件名及其上次写入时间,并将它们绑定到网格中。
因此我一直在使用List<List<string>>
和List<List<DateTime>>
。
专家请帮忙。
此致
阿努拉格
答案 0 :(得分:1)
您没有初始化内部列表,使用以下行初始化内部列表:
listOfDateTimes.Add(new List<DateTime>());
相关代码部分:
List<List<DateTime>> listOfDateTimes = new List<List<DateTime>>();
for(int xx=0;xx<40;xx++)
{
listOfDateTimes.Add(new List<DateTime>());
for(int yy=0;yy<numList[xx];yy++)
{
listOfDateTimes[xx].Add(File.GetLastWriteTime(ultimateList[xx][yy]));
}
}
如果异常仍然存在,则问题似乎与ultimateList
有关;检查ultimateList
的最大索引。
答案 1 :(得分:1)
listOfDateTimes
为空,您忘记插入嵌套列表。
List<List<DateTime>> listOfDateTimes = new List<List<DateTime>>();
for(int xx=0;xx<40;xx++)
{
listOfDateTimes.Add(new List<DateTime>());
for(int yy=0;yy<numList[xx];yy++)
{
listOfDateTimes[xx].Add(File.GetLastWriteTime(ultimateList[xx][yy]));
}
}
或者
List<List<DateTime>> listOfDateTimes = Enumerable.Range(0, 40)
.Select(i => new List<DateTime>())
.ToList();