读书人

有个想法 怎么实现呢

发布时间: 2012-03-28 15:40:03 作者: rapoo

有个想法 如何实现呢
假如说有这样一个类

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好像取不到返回值吧

读书人网 >C#

热点推荐