2011-09-28 4 views
1
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 result; 
} 

왜 내 코드가 내 정적 값을 허용하지 않습니까? 함수 매개 변수에 기본 매개 변수를 할당하려면 어떻게합니까? 실제로 Vector2? mulFactors = new Vector(0.2,0.3) 또는 Vector2? mulFactors = Vector2.Zero이 작동하지 않습니다.메서드에서의 기본값 - 컴파일 오류 : 컴파일시의 상수

답변

6

기본적으로 할 수 없습니다. 이 유형의 사용을 허용하려면 컴파일러에서 값을 지원해야합니다 (기본적으로 상수). 난 그냥 여기 null을 사용합니다 : 다음

, Point? shifts = null) 

:

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

또는 더 짧은'교대 = 교대 ?? MyClass.DefaultShifts; ' – Stormenet

+0

나는이 해결책을 알고 있지만, if-else 블록을 사용하지 않으려 고 노력했다. – icaptan

4

MSDN에서 :

각 선택적 매개 변수는 정의의 일부로서 기본 값을가집니다. 해당 매개 변수에 대해 인수가 보내지지 않으면 기본값이 사용됩니다. 기본값은 다음 유형의 표현식 중 하나 여야합니다.

상수 표현식.

새로운 ValType() 형식의 표현식입니다. 여기서 ValType은 열거 형 또는 구조체와 같은 값인 값입니다.

형식 기본값 인 (ValType)의 표현식입니다. 여기서 ValType은 값이 유형입니다.

언급 한 사례 중 귀하가 언급 한 사례가 없으므로 귀하에게 적합하지 않습니다. :)

+0

더 답변;) – jackal