Действие как необязательный параметр в функции

Возможно ли иметь действие как необязательный параметр в функции? Кнопка2Action не обязательна.

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

Я попробовал это, например, p_Button2Action = delegate{ Debug.Log("NotInUse"); } p_Button2Action = delegate{ Debug.Log("NotInUse"); } но он не компилируется из-за значения параметра по умолчанию для p_Button2Action должна быть константой времени компиляции. Как вы делаете необязательное действие, которое является постоянной времени компиляции?

Ответ 1

Вы должны указать постоянное значение для параметра по умолчанию, поэтому единственным значением по умолчанию, которое вы можете указать для действия, является 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"); }

    ...
}

Ответ 2

Одним из способов решения этой проблемы может быть использование классической перегрузки:

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
}

Таким образом вы можете указать действие по умолчанию в перегрузке с двумя параметрами.

Ответ 3

Попробуй это:

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