2011-11-08 42 views

回答

3

對於複雜的參考值,默認參數值是不可能的。第一個工作原因是參數是原始碼 ,它們存儲在堆棧中,並被值 複製。數組是複雜的參考值,因此它們必須先被分配,然後才能顯示爲參數。

編輯:
@亨克Holterman的評論很好。我並沒有直接瞭解堆棧或堆是否發揮作用,所以這些信息要麼是錯誤的,要麼是誤導性的。我知道的主要標準是隻能使用primitives types。從this document

的缺省值必須是以下類型的表達式中的一個:

  1. 常量表達式;

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

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

的「原始人」列表上面的鏈接已被修改,於2010年被稱爲「內置」的類型。它可以是found here

+0

串也引用類型和它們可以被用來作爲默認就好了。堆棧在這裏確實不起作用。 –

+0

@亨克·霍特曼:夠公平的。這是對我與某人的對話的補充,我無法找到任何支持它的東西(加上你說的聽起來很合理)。我已經擊敗了它並提供了鏈接以支持我的聲明,即參數必須是原語(或者現在在2010年稱爲 - 內置類型)。 –

3

默認參數值必須是編譯時間常量,所以你不能這樣做。

2

您不能使用初始值作爲默認值。

你可以使用:

private static void diagonalFill(int[,] a, 
     int[] fillType = null, 
     int[] diagFill = null) 
{ 
    if (fillType == null) 
    fillType = new int[] {0,-1}; 

    if (diagFill == null) 
    diagFill = new int[] {-1,1}; 

    ... 
} 
+0

這個解決方案當然依賴於null,它不是一個永遠不會作爲參數傳遞的選項。 – AndrewC