2009-05-08 5 views
47

Est-ce que C# permet de remplir les hashtables en expressions d'une ligne? Je pense à quelque chose d'équivalent à Python ci-dessous:La manière la plus concise d'initialiser une table de hachage C#

mydict = {"a": 23, "b": 45, "c": 67, "d": 89} 

En d'autres termes, est-il une alternative à régler chaque paire clé-valeur dans une expression distincte?

Répondre

73

C# 3 a une extension de langage appelée initialiseurs de collection qui vous permettent d'initialiser les valeurs d'une collection dans une instruction.

Voici un exemple en utilisant un Dictionary<,>:

using System; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main() 
    { 
     var dict = new Dictionary<string, int> 
     { 
      {"a", 23}, {"b", 45}, {"c", 67}, {"d", 89} 
     }; 
    } 
} 

Cette extension de la langue est prise en charge par le compilateur C# 3 et tout type qui implémente IEnumerable et a une méthode Add public.

Si vous êtes intéressé, je vous suggère de lire this question I asked here on StackOverflow à pourquoi l'équipe C# a mis en œuvre cette extension linguistique de telle manière curieuse (une fois que vous lisez les excellentes réponses à la question que vous verrez que cela fait beaucoup de sens).

+1

Existe-t-il une syntaxe similaire pour définir des dictionnaires à niveaux multiples? Par exemple, 'Dictionary >'? –

+0

J'ai trouvé la technique et je vais l'ajouter comme une modification à votre réponse, même si c'est un peu verbeux, pas sûr si cela fait gagner beaucoup de temps à quelqu'un. –

Questions connexes