C # Значение по умолчанию в методе — ошибка компиляции: константа времени компиляции

#c# #xna #default-value

#c# #xna #значение по умолчанию

Вопрос:

 private static Vector2 DefaultMulFactors = new Vector2(0.5f, 0.5f);
private static Point DefaultShifts = new Point(0,0);

public static Vector2 Function(Vector2? mulFactors = MyClass.DefaultMulFactors , Point? shifts = MyClass.DefaultShifts  )
{ 
    ...
    return resu<
}
  

Почему мой код не принимает мои статические значения? Как я могу назначить параметры по умолчанию для параметров моей функции? Действительно Vector2? mulFactors = new Vector(0.2,0.3) или Vector2? mulFactors = Vector2.Zero не работает.

Ответ №1:

В принципе, вы не можете. Значение должно поддерживаться компилятором, чтобы разрешить этот тип использования (по сути, это константа). Я бы просто использовал null здесь:

 , Point? shifts = null)
  

затем:

 if(shifts == null) shifts = MyClass.DefaultShifts;
  

Комментарии:

1. Или даже короче shifts = shifts ?? MyClass.DefaultShifts;

2. я знаю это решение, но я пытался не использовать блок if-else 🙂 спасибо за ответ, Марк.

Ответ №2:

Из MSDN:

Каждый необязательный параметр имеет значение по умолчанию как часть его определения. Если для этого параметра не передается аргумент, используется значение по умолчанию. Значение по умолчанию должно быть одним из следующих типов выражений:

постоянное выражение;

выражение вида new ValType(), где ValType — это тип значения, такой как перечисление или структура;

выражение формы по умолчанию (ValType), где ValType — это тип значения.

Ни один из упомянутых случаев не является вашим, поэтому он не работает для вас! 🙂