18

Is it possible to have an Action as an optional parameter in a function? The button2Action should be optional.

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

I tried it with e.g p_Button2Action = delegate{ Debug.Log("NotInUse"); } but it does not compile due to Default parameter value for p_Button2Action must be a compile-time constant. How do you make an optional Action that is a compile time constant?

Esa
  • 1,636
  • 3
  • 19
  • 23

2 Answers2

22

You must specify a constant value for a default parameter, so the only default value you can specify for an Action is null.

However, it's easy to check for null and substitute the correct value:

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

    ...
}
Matthew Watson
  • 104,400
  • 10
  • 158
  • 276
4

One workaround for this may be to just use classical overloading:

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
}

This way you can specify the default action in the overload with two parameters.

mario
  • 1,248
  • 9
  • 9