2011-09-28 70 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不起作用。C#方法的默認值 - 編譯錯誤:編譯時常量

回答

6

基本上,你不能。該值必須由編譯器支持以允許使用該類型(實質上,該值爲常數)。我只想用null這裏:

, Point? shifts = null) 

則:

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

甚至更​​短'shift = shift? MyClass.DefaultShifts;' – Stormenet

+0

我知道這個解決方案,但是我試圖不使用if-else塊:)謝謝你的回答Marc。 – icaptan

4

從MSDN:

每個可選參數有一個默認值作爲其定義的一部分。 如果該參數未發送參數,則使用默認值。 默認值必須是以下表達式類型之一:

常量表達式;

表達形式新ValType(),其中ValType是一個值 類型,如枚舉或結構;

默認形式(ValType)的表達式,其中ValType是值 類型。

沒有一個提到的情況是你的,這就是爲什麼它不適合你! :)

+0

更好的答案;) – jackal