16

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

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

我用 eg 进行了尝试,p_Button2Action = delegate{ Debug.Log("NotInUse"); }但由于p_Button2Action 的默认参数值必须是编译时常量,因此无法编译。您如何制作作为编译时间常数的可选操作?

4

3 回答 3

20

您必须为默认参数指定一个常量值,因此您可以为 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"); }

    ...
}
于 2013-06-27T07:40:49.553 回答
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
}

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

于 2013-06-27T07:37:22.650 回答
0

尝试这个:

public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse", Action p_Button2Action = null)
{
 // Stuff happens here
}
于 2013-06-27T07:35:52.057 回答