2010-05-16 82 views
1

在MonoDevelop的,我有以下代碼編譯:爲什麼`new int [x] {}`無效?

int[] row = new int[indices.Count]{}; 

然而,在運行時,我得到:

Matrix.cs(53,53):錯誤CS0150:一個 常數值預期(CS0150) (testMatrix)

我知道這個錯誤是什麼手段,迫使我然後調整數組:

int[] row = new int[indices.Count]{}; 
Array.Resize(ref row, rowWidth); 

這是我剛剛處理的事情,因爲我在Linux上使用MonoDevelop?我確信在.Net 3.5下,我能夠用包含數組寬度的變量初始化一個數組。任何人都可以證實這是孤立的嗎?如果是這樣,我可以將bug報告給bugzilla。

+0

這個問題可能是因爲你混合陣列的初始化和對象初始化。刪除'{}',你應該沒問題。另外,我試圖在OpenSuse11.2上的gsharp中初始化這個數組,並且它會立即失敗並帶有'{}'。 – 2010-05-16 21:42:00

回答

13

您不能將數組創建語法與對象初始化語法混合使用。刪除{ }

當你寫:

int[] row = new int[indices.Count]; 

你正在創建初始化爲默認值大小indices.Count的新數組。

當你寫:

int[] row = new int[] { 1, 2, 3, 4 }; 

你正在創建一個數組,然後初始化它的內容的價值[1,2,3,4]。數組的大小是從元素的數量推斷出來的。這是簡寫​​:

int[] row = new int[4]; 
row[0] = 1; 
row[1] = 2; 
row[2] = 3; 
row[3] = 4; 

陣列仍然首先初始化爲默認值,這個語法只是提供了一個速記避免havind自己寫這些額外的任務。

+0

Doh !!!我應該記住這一點。 – IAbstract 2010-05-16 22:30:36

1

下面的代碼編譯失敗在Windows/.NET/LINQPad同樣的原因:

void Main() 
{ 
    int[] row = new int[indices.Count]{}; 
    row[2] = 10; 
    row.Dump(); 
} 

// Define other methods and classes here 
public class indices { 
    public static int Count = 5; 
} 

然而,除去聲明({})使得它的工作對象的初始化。

1

在C#,如果要聲明爲空數組的語法應該是:

INT []行=新INT [indices.Count];

0

因爲當你使用使用數組初始化語法和指定數組

int[] arr = new int[5]{1,2,3,4,5}; 

大小的數組的大小是多餘的信息。編譯器可以從初始化列表中推斷出大小。正如其他人所說,你可以創建空數組:

int[] arr = new int[5]; 

或使用初始化列表:

int[] arr = {1,2,3,4,5};