Действие как необязательный параметр в функции
Возможно ли иметь действие как необязательный параметр в функции? Кнопка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
}