2012-01-29 12 views
6

我似乎無法找到有關新[]應該是什麼的文檔。從它下面的實例似乎是一個對象數組速記這是什麼新的[]速記?

var json = new[] { 
      new object[] {"20-Jun-2008", 200 }, 
      new object[] {"20-Jun-2009", 250 } 
     }; 
+0

難道你不能只檢查'json'的類型,看看返回的是什麼? – 2012-01-29 20:09:39

回答

21

這些是隱含類型數組

請參閱C# 3.0 specifications

陣列創建表達式的語法(§7.5.10.2)被擴展爲支持 隱式類型陣列創建表達式: 陣列創建表達式:... new [ ] array-initializer

在一個隱式類型的數組創建表達式中, 數組實例的類型是從數組 初始值設定項中指定的元素中推斷出來的。具體來說,由數組初始值設定項中 表達式類型組成的集合必須只包含一個到 的類型,該集合中的每個類型都可以隱式轉換,如果該類型不是null類型,則該類型的數組是創建。如果不能推斷出一個 類型,或者推斷類型爲空類型,則會發生編譯時錯誤。

以下是隱式類型數組創建 表達式的例子:

var a = new[] { 1, 10, 100, 1000 };   // int[] 
var b = new[] { 1, 1.5, 2, 2.5 };   // double[] 
var c = new[] { "hello", null, "world" };  // string[] 
var d = new[] { 1, "one", 2, "two" };   // Error 

最後一個表達式導致編譯時間錯誤,因爲既不INT 也不串是隱式轉換爲其它。在這種情況下,必須使用明確鍵入的 數組創建表達式,例如 指定類型爲object []。或者,其中一個元素 可以轉換爲通用基本類型,然後該元素將成爲推斷的元素類型。

隱式類型的數組創建表達式可以與 匿名對象初始化器組合以創建匿名類型的數據 結構。例如:

var contacts = new[] { 
    new { 
     Name = "Chris Smith", 
     PhoneNumbers = new[] { "206-555-0101", "425-882-8080" } 
    }, 
    new { 
     Name = "Bob Harris", 
     PhoneNumbers = new[] { "650-555-0199" } 
    } 
}; 
7

的符號是一個implicitly typed array聲明。你的情況,它是一個對象數組數組。

+0

它是匿名的,不是'object [] []'類型的變量'json'? – dillenmeister 2012-01-29 20:20:02

+0

@dillenmeister - 公平點。確實沒有匿名類型。 – Oded 2012-01-29 20:22:41

1

這意味着新的[]是一個隱式類型陣列。由於它是隱式輸入的,因此在這個例子中你必須給它分配一些東西。就像你必須使用var關鍵字一樣。

1

這是隱式輸入。由於該集合中的所有元素都是object數組,因此編譯器可以推斷出該數組本身必須是object數組的集合。