C# 传递未知类型的参数

C# 传递未知类型的参数,c#,methods,C#,Methods,如何在动作委托中传递未知类型的参数 Button b1 = new Button("HI!", Class.method); 在课堂上: Action doAction; string text; public Button(string Message, Action func) { text = Message; doAction = func; } public void Clicked() { doAction

如何在动作委托中传递未知类型的参数

Button b1 = new Button("HI!", Class.method);
在课堂上:

Action doAction;
string text;

public Button(string Message, Action func)
    {
        text = Message;
        doAction = func;
    }

public void Clicked()
    {
        doAction();
    }
我希望在添加按钮时可以在函数中传递参数:

Button b2 = new Button("HI!", Class.method(unknown_parameter));
谢谢


编辑:我听说过一些关于
操作的东西,但我真的不清楚。

类中的括号。方法(未知参数)
将尝试调用函数,因此不能像那样传递参数。相反,您还必须传递参数,并在函数中执行该方法

例如,您可以使用泛型来实现这一点:

class Button<T>
{
    public Button (string message, Action<T> func, T param)
    {
        func(param); // calls the method
    }
}

new Button<string>("foo", Class.method, "bar");

如果您根本不知道类型是什么,可以使用“Action”,在这种情况下,代码如下所示:

public Button(string Message, Action<object> func)
{
    text = Message;
    doAction = func;
}

public void Clicked(object o)
{
    doAction(o);
}
public按钮(字符串消息,动作函数)
{
文本=消息;
doAction=func;
}
已单击公共空(对象o)
{
作用(o);
}

但是。。。挑战将是如何处理“doAction”中的未知类型。解决这个问题的方法有很多种,但是为了真正能够推荐应该做什么,我认为我们需要看看未知参数来自哪里的一些例子。通常,我们对可能的类型有一些想法。

根据您的需要,可以使用type
Object
dynamic
泛型。您的第二个解决方案似乎是更好的选择。
public Button(string Message, Action<object> func)
{
    text = Message;
    doAction = func;
}

public void Clicked(object o)
{
    doAction(o);
}