我想这样做,但这是不可能的(不能从'void'转换为'System.Action')。发送静态方法+参数作为参数
class Program
{
public static void Main()
{
int n = 2;
ClassB cb = new ClassB();
cb.SetMethod(ClassA.MethodA(n)); //Cann't convert 'void' to 'System.Action<int>'
}
}
public class ClassA
{
public static void MethodA(int a)
{
//code
}
}
public class ClassB
{
Delegate del;
public void SetMethod(Action<int> action)
{
del = new Delegate(action);
}
public void ButtonClick()
{
del.Invoke();
}
}
public delegate void Delegate(int n);
我可以发送参数“N”,如在“使用setMethod”方法第二个参数,但我将不得不存储变量到后传递给“del.Invoke(PARAM)”。我想使用“del.Invoke()”。
使用setMethod有一个动作的参数了methodA返回无效参数,所以你必须要改变的返回类型methodA to Action –
@StuartLC即使此代码仍然不能工作,“ClassB.ButtonClick”方法正在调用单个参数动作的调用,但不提供参数。这有点不清楚他们想要在这里实现什么......也许他们只是想要一个没有参数的Action:'setMethod((=)=> classA.methodA(n)'你提到了吗? – Clint
请遵循C#的命名规则,这些细节使得你的代码不可读。信 –