System.Collections.Generic

时间:2012-10-11 15:59:06

标签: c# asp.net list generics dictionary

目前,我有一个主文件夹,其中有320个子文件夹,我将这些文件夹名称保存到临时表中的sql server DB中。然后我检索该数据,使用它,然后删除它。

要拉出我使用的文件夹名称:

`List<string> FolderInfoList = Directory.GetDirectories(stringFolderPath).ToList();`

我的临时表有2列(ID,Name),其中ID是自动增量字段。

然后我将名称详细信息保存到第二个表格中

enter image description here

之后我使用id检索每个文件夹名称,我使用,我将在使用后删除。

由于我的经理要求我不使用数据库,我需要找到另一种解决方案。我知道有一种方法使用字典功能,但我不知道如何使用它或如何为单个文件夹名称分配唯一的ID或当我检索所有文件夹名称列表功能时,我将它们检索为列表,而不是个别。我需要使用任何替代方法来操作相同的函数。

3 个答案:

答案 0 :(得分:0)

您可以对集合使用ToDictionary()方法 - 您只需要为字典定义“key”值。

您可以使用列表中项目的索引吗?

List<string> folderInfoList = 
    Directory.GetDirectories(stringFolderPath).ToList();

Dictionary<int,string> dict = 
    folderInfoList.ToDictionary(i => i , folderInfoList.IndexOf(i));

或guid(知道每次跑步时Guids会有所不同,即使Name是相同的:

Dictionary<string,string> dict = 
    folderInfoList.ToDictionary(i => i , Guid.NewGuid().ToString());

答案 1 :(得分:0)

如果我理解得很好,你想用唯一的ID密钥识别directroy。但是所有文件夹都来自同一个父目录。然后,名称是唯一的。无需创建另一个密钥。

如果你真的想要,你可以使用一个简单的int计数器,或者为了更通用的目的,使用框架提供的GUID,如果需要从多个异构源列出目录,则可以高效。

答案 2 :(得分:0)

您可以尝试以下操作...然后它将为您存储在新课程中的每个文件夹分配一个唯一的guid

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.DirectoryServices;
using System.IO;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace zielonka.co.uk.stackoverflow.com.samples.unique
{
    class Program
    {
        public class info
        {
            public string name;
            public Guid uniqueID;
        }
        static void Main(string[] args)
        {
            List<string> FolderInfoList = Directory.GetDirectories("c:\\").ToList();
            List<info> uniqueFolders = new List<info>();
            foreach (var VARIABLE in FolderInfoList)
            {
                uniqueFolders.Add(new info(){name = VARIABLE, uniqueID = new Guid()});
            }
            foreach (var uniqueFolder in uniqueFolders)
            {
                Console.WriteLine(uniqueFolder.uniqueID+" "+uniqueFolder.name);
            }
        }
    }
}