日期:2014-05-18 浏览次数:20847 次
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; } }
//添加定义的方法,但不执行 array.Add(MyClass.Method1(1)); array.Add(MyClass.Method2("2","3")); array.Add(MyClass.Method3(4, 5)); //循环出来挨个执行 foreach (var item in array) { item(); }
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楼
------解决方案--------------------
你这就是一个参数表加方法名的列表。
用反射不就正好么。
------解决方案--------------------
public delegate TResult MethodDelegateHandle<TResult, TParams>(params TParams[] args);
------解决方案--------------------
嗯,上面的方法其实都不错,只是都是场合性的,也就是完成lz现有的要求没啥问题
但是lz的要求一旦继续深入下去,应该算是一个小型的语法解释引擎了
比如 "1+2*method1(参数1,参数2)-Method2(参数3)"
------解决方案--------------------