日期:2014-05-18  浏览次数:20861 次

有个想法 如何实现呢
假如说有这样一个类
C# code
    public class MyClass
    {
        public static int  Method1(int p1)
        {
            return p1;
        }
        public static string Method2(string p1,string p2)
        {
            return p1 + p2;
        }
        public static List<int> Method3(int p1, int p2)
        {
            List<int> list = new List<int>();
            list.Add(p1);
            list.Add(p2);
            return list;
        }
    }


然后想实现这样的一个操作,把方法添加进一个数据,但不执行,添加完毕后然后再循环出来挨个执行
C# code
//添加定义的方法,但不执行
array.Add(MyClass.Method1(1));
array.Add(MyClass.Method2("2","3"));
array.Add(MyClass.Method3(4, 5));
//循环出来挨个执行
foreach (var item in array)
{
   item();
}


这应该如何去实现呢,别告诉我用if一个一个判断。。。 就像委托一样的添加最后一并执行,但是委托貌似和我想实现的有点不同的,可以看出我执行的方法中不仅返回类型不同,参数也不同。而且执行的时候是参数值是不一样的,委托的话是执行的时候传入一个参数,各个方法执行时的参数值都一样的。

这个怎么弄呢?


------解决方案--------------------

C# code

List<Action> array = new List<Action>();
//添加定义的方法,但不执行
array.Add(() => MyClass.Method1(1));
array.Add(() => MyClass.Method2("2","3"));
array.Add(() => MyClass.Method3(4, 5));
//循环出来挨个执行
foreach (var item in array)
{
   item();
}

------解决方案--------------------
考虑使用Dictionary<TMethod, TParams[]>,其中TMethod可以定义成TResult delegate(T params[])形式的委托,大概思路如此,具体类型可以再考虑
------解决方案--------------------
泛型也是具体情况下具体处理.如果不判断或者强制转换,你怎知道你要处理的集合究竟是何种类型,又怎能统一的去处理这批数据呢?
------解决方案--------------------
学习2楼
------解决方案--------------------
你这就是一个参数表加方法名的列表。
用反射不就正好么。
------解决方案--------------------
探讨
引用:

你这就是一个参数表加方法名的列表。
用反射不就正好么。

那也要指定啊 我又不是全追加。。

------解决方案--------------------
定义委托:
C# code
public delegate TResult MethodDelegateHandle<TResult, TParams>(params TParams[] args);

------解决方案--------------------
嗯,上面的方法其实都不错,只是都是场合性的,也就是完成lz现有的要求没啥问题

但是lz的要求一旦继续深入下去,应该算是一个小型的语法解释引擎了

比如 "1+2*method1(参数1,参数2)-Method2(参数3)"
------解决方案--------------------
探讨

Action好像取不到返回值吧