操作作为函数中的可选参数

时间:2013-06-27 07:25:06

标签: c# action optional-parameters

是否可以将Action作为函数中的可选参数? button2Action应该是可选的。

public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse", Action p_Button2Action)
{
 // Stuff happens here
}

我尝试使用例如p_Button2Action = delegate{ Debug.Log("NotInUse"); },但由于 p_Button2Action的默认参数值必须是编译时常量,因此无法编译。如何创建一个可选的Action编译时间常数?

3 个答案:

答案 0 :(得分:14)

您必须为默认参数指定常量值,因此您可以为Action指定的唯一默认值为null。

但是,检查null并替换正确的值很容易:

public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse", Action p_Button2Action = null)
{
    if (p_Button2Action == null)
        p_Button2Action = delegate{ Debug.Log("NotInUse"); }

    ...
}

答案 1 :(得分:3)

这可能只是使用经典重载:

public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse")
{
    DrawWindow(p_PositionAndSize, delegate{ Thread.Sleep(1); }, p_Button2Text);
}

public void DrawWindow(Rect p_PositionAndSize, Action p_Button2Action, string p_Button2Text = "NotInUse")
{
 // Stuff happens here
}

这样,您可以使用两个参数指定重载中的默认操作。

答案 2 :(得分:0)

试试这个:

public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse", Action p_Button2Action = null)
{
 // Stuff happens here
}