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" }
}
};
Non puoi semplicemente controllare il tipo di'json 'per vedere cosa sta tornando? –