创建值为方法的字典

时间:2017-12-01 08:45:32

标签: c# dictionary

我有一个System.Collections.Generic.List,这些文件是我从7z获得的。 对于这些文件中的每一个,我需要编写某种解析器来处理它们并获得有用的信息。

最大文件数为21。

所以逻辑是: 我有一本字典:

{
    Dictionary<string, string> filestoproces = new Dictionary<string, string>(21);
    stfiles.Add(appevent.evt, applicproc);
    stfiles.Add(codes.txt, codesproc);
    stfiles.Add(cpu_info.htm, cpuinfoproc);
    stfiles.Add(drives_defrag_info.txt, ddefragproc);
    stfiles.Add(DxDiag.txt, dxdiagproc);
    stfiles.Add(sysevents.evt, syseventproc);
}

Directory.GetFiles
S:\test_project_st\test\appevent.evt
S:\test_project_st\test\codes.txt
S:\test_project_st\test\cpu_info.htm
S:\test_project_st\test\drives_defrag_info.txt
S:\test_project_st\test\DxDiag.txt
S:\test_project_st\test\sysevents.evt

也许你可以提供更适合这项任务的东西。 我们的想法是解析列表中的文件......

问题是我可以使用词典在键的值中使用某种方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用类型为Func<T>Action<T>的字典,具体取决于您对每个项目执行的处理操作。例如,如果每个处理函数都应返回void并获取单个字符串参数,则可以使用Action<string>委托作为您的值类型并像这样初始化字典

Dictionary<string, Action<string>> dict = new Dictionary<string, Action<string>>(21);

然后,您将为每个处理函数定义委托,并将它们添加到具有适当文件名作为键的字典中。

来自MSDN的FuncAction代表提供了更多有用的信息。

答案 1 :(得分:0)

C#支持delegates,它们基本上是函数或方法的指针。 .NET内置了许多通用委托,可以支持任何 1 方法签名。其中最简单的是Action,它表示不带参数且不返回任何值的方法。此类型可用于字典的值。

这是一个使用Actions创建字典然后调用每个字典的简化示例:

static void Main(string[] args)
{
    Dictionary<string, Action> files = new Dictionary<string, Action>();
    files.Add("file1", MethodForFile1);
    files.Add("file2", MethodForFile2);

    foreach (var file in files)
    {
        Action method = file.Value;
        method();
    }
}

private static void MethodForFile1()
{
    Console.WriteLine("Processing file 1.");
}

private static void MethodForFile2()
{
    Console.WriteLine("Processing file 2.");
}

如果您需要不同的签名(例如带参数的签名),可以使用其他委托类型,例如Action<T>Func<T>

1好吧,每个签名都有16个或更少的参数。如果您需要更多,那么您就会遇到更大的问题。