使用Reflection自动创建委托列表

时间:2015-09-02 14:09:20

标签: c# reflection delegates

我有一个名为Operations.cs的类,有一些方法。我想创建一个委托列表来随机选择一个方法。现在我有以下工作解决方案:

public delegate void Delmethod(ExampleClass supervisor);
public static Operations op = new Operations();
public List<Delmethod> opList = new List<Delmethod>();

opList.Add(op.OpOne);
opList.Add(op.OpTwo);
opList.Add(op.OpThree);
opList.Add(op.OpFour);
opList.Add(op.OpFive);
opList.Add(op.OpSix);
opList.Add(op.OpSeven);

但我真正想要的是在Operations.cs中添加新方法的情况下自动生成List opList。我试图在尝试中使用反射来解决我的问题,如下所示:

List<MethodInfo> listMethods = new List<MethodInfo>(op.GetType().GetMethods().ToList());

foreach (MethodInfo meth in listMethods)
{
   opList.Add(meth);
}

我认为这不起作用,因为我对代表的意思混淆了,但我没有想法。

1 个答案:

答案 0 :(得分:2)

您必须从特定方法信息中创建委托。 假设Operations只有具有相同签名的公共实例方法,代码将如下所示:

public static Operations op = new Operations();
public List<Action<ExampleClass>> opList = new List<Action<ExampleClass>>();

oplist.AddRange(op
    .GetType()
    .GetMethods()
    .Select(methodInfo => (Action<ExampleClass>)Delegate.CreateDelegate(typeof(Action<ExampleClass>), op, methodInfo)));

请注意,您无需声明Delmethod,因为有Action<T>