访问DateTime对象列表时出现异常

时间:2014-06-13 08:20:56

标签: c# asp.net list datatable

我有一个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>>

专家请帮忙。

此致

阿努拉格

2 个答案:

答案 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();