使用反射自动创建委托列表



我有一个叫做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);
}

我认为这不起作用,因为我对委托的含义造成了混淆,但是我没有主意了。

你必须从特定的方法info创建一个委托。假设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>

相关内容

  • 没有找到相关文章

最新更新