C# ,能不能用Dictionary存储函数,然后取出来还能用?

时间:2022-09-04 13:03:33
小弟想标识一个函数,存储在Dictionary中,需要的时候根据key直接取拿出来用,请问各位大神。C#中有没有这种用法???

6 个解决方案

#1


函数包括函数名、参数表和返回值啊

其实感觉反射和你所想的差不多。。。

#2


怎么个用法?或者你可以存委托

#3


将函数转换成Delegate就行了
Dictionary<string, Delegate>

如果函数有统一的形式,比如void x();,则可以转换成Action
Dictionary<string, Action> d;
d.Add("xxx", new Action(x));
d["xxx"]();

#4


如果你确定要这么做的话,就像1楼所说的,用反射。

Dictionary<"函数名","函数名"> func=new Dictionary<"函数名","函数名">;
func.Add("Func1","Func1");
func.Add("Func1","Func1");

用的时候直接type.GetMethod(func["Func1"]);

感觉这样还不如用List<string>存放函数名

#5


用Action 或者Func

#6




using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dic = new Dictionary<int, Action>
                      {
                          [0] = Action1,
                          [1] = Action2
                      };

            foreach (var item in dic.Values)
            {
                item();
            }
        }

        static void Action1() => Console.WriteLine(1);
        static void Action2() => Console.WriteLine(2);
    }
}

#1


函数包括函数名、参数表和返回值啊

其实感觉反射和你所想的差不多。。。

#2


怎么个用法?或者你可以存委托

#3


将函数转换成Delegate就行了
Dictionary<string, Delegate>

如果函数有统一的形式,比如void x();,则可以转换成Action
Dictionary<string, Action> d;
d.Add("xxx", new Action(x));
d["xxx"]();

#4


如果你确定要这么做的话,就像1楼所说的,用反射。

Dictionary<"函数名","函数名"> func=new Dictionary<"函数名","函数名">;
func.Add("Func1","Func1");
func.Add("Func1","Func1");

用的时候直接type.GetMethod(func["Func1"]);

感觉这样还不如用List<string>存放函数名

#5


用Action 或者Func

#6




using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dic = new Dictionary<int, Action>
                      {
                          [0] = Action1,
                          [1] = Action2
                      };

            foreach (var item in dic.Values)
            {
                item();
            }
        }

        static void Action1() => Console.WriteLine(1);
        static void Action2() => Console.WriteLine(2);
    }
}