我有一个名为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);
}
我认为这不起作用,因为我对代表的意思混淆了,但我没有想法。
答案 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>
。