2012-01-29 15 views
6

Non riesco a trovare alcuna documentazione su cosa dovrebbe essere []. Dall'esempio sotto sembra essere un array oggetto STENOGRAFIACos'è questa nuova [] una stenografia?

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

Non puoi semplicemente controllare il tipo di'json 'per vedere cosa sta tornando? –

risposta

21

Questi sono matrici implicitamente digitate.

Vedere C# 3.0 specifications.

La sintassi delle espressioni di creazione array (§7.5.10.2) è esteso a supporto implicitamente tipizzate espressioni di creazione di array: array-creazione-espressione: ... new [ ] array-initializer

In una creazione matrice implicitamente tipizzato espressione, il tipo dell'istanza dell'array viene dedotta dagli elementi specificati nell'inizializzatore dell'array . Nello specifico, l'insieme formato dai tipi delle espressioni nell'inizializzatore di array deve contenere esattamente un tipo su che ogni tipo nell'insieme è implicitamente convertibile e se il tipo non è il tipo null, un array di quel tipo è creato. Se non è possibile dedurre esattamente un tipo o se il tipo dedotto è il tipo null, si verifica un errore di compilazione .

Di seguito sono riportati alcuni esempi di implicitamente tipizzate creazione dell'array espressioni:

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 

L'ultima espressione provoca un errore di compilazione perché né int né stringa viene implicitamente convertibile all'altro. In questo caso, è necessario utilizzare un'espressione di creazione di matrice esplicita , ad esempio che specifica il tipo di oggetto []. In alternativa, uno degli elementi può essere convertito in un tipo di base comune, che diventerebbe quindi il tipo di elemento dedotto .

Le espressioni di creazione di array implicitamente tipizzate possono essere combinate con gli inizializzatori di oggetti anonimi per creare strutture di dati anonimi . Per esempio:

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

La notazione è una dichiarazione implicitly typed array.

Nel tuo caso, è una matrice di matrici di oggetti.

+0

Come è anonimo, non è la variabile 'json' di tipo' oggetto [] [] '? – dillenmeister

+0

@dillenmeister - Punto giusto. In effetti nessun tipo anonimo. – Oded

1

Ciò significa che il nuovo [] è un array implicitamente tipizzato. Dato che è implicitamente digitato, devi assegnargli qualcosa come in questo esempio. Proprio come è necessario con la parola chiave var.

1

È una digitazione implicita. Poiché tutti gli elementi di quella raccolta sono gli array object, il compilatore può dedurre che l'array stesso deve essere una raccolta di matrici object.