2013-10-09 233 views
2

在C#,陣列可以由以下語法初始化陣列初始化

string[]arr = {"text1","text2"}; // this works 

爲什麼以下不起作用

string[]arr1; 
arr1={"phrase1","phrase2"};//Does not compile. 
+2

因爲你不是真的* *初始化變量第二個片段,你想分配一個值。第一種語法是特殊的。 – millimoose

+3

第一種語法實際上隱含了'new string [] {...}'。 –

+2

該語法只是編譯器糖。它不知道如何做第二個語法,所以它不起作用。就那麼簡單。 – adrianbanks

回答

8
string[] arr = { "text1", "text2" }; 

這工作,因爲這是一個特殊的語法,只有當第一初始化數組變量允許的(我個人甚至不知道它的存在)。

如果你想在以後新的數組分配給一個變量,你需要說new

arr = new string[] { "text1", "text2" }; 

你也可以說只是new []編譯器會找出類型適合你。

+0

在你的第一個例子中,由於這個簡寫符號,Resharper會將'new string []'標記爲不必要的(如果你已經包含了它)。 –

3

第二語法根據C#規範是錯誤的: http://msdn.microsoft.com/en-us/library/aa664573%28v=vs.71%29.aspx

檢查鏈接以及有關如何初始化數組的更多示例: All possible C# array initialization syntaxes

+0

+0:雖然鏈接看起來合理,但您應該在帖子中內聯彙總外部鏈接。即在這種情況下,來自規範的一兩句話會使答案好得多。本地(SO)鏈接更好,但提供摘要+鏈接而不僅僅是鏈接(即如果其他帖子被刪除,大多數人將無法看到它)仍然是一個好習慣。 –

0

這是關於分配內存。 第一個是短期的:

string[]arr = new string[]{"text1","text2"}; 

所以編譯器在同一語句知道元素使用new關鍵字分配的數量。

第二個錯誤的語法。 如果你想要做的兩個步驟:

string[]arr1; // defines array(pointer) 
arr1=new string[]{"phrase1","phrase2"}; // again when `new` is used for dynamic memory allocation, the size is available. 
+0

您不能將字符串分配給int! new int [] {「phrase1」,「phrase2」}; –

+0

哈哈,這對我來說是新的! – Jerry

+0

你現在修好了...... :) –