10
votes

C # Comment puis-je définir un dictionnaire qui contient différents types?

Si vous avez le code suivant. Où vous voyez le XXX, je voudrais mettre dans un tableau de type long [].

Comment puis-je faire cela et comment puis-je chercher des valeurs du dictionnaire? Est-ce que j'utilise simplement par défaut ["payside"] [0] pour obtenir le premier élément? P>

public static Dictionary<string, object> defaultAmbience = new Dictionary<string, object>
{
    { "UserId", "99999" },
    { "CountryId", XXX },
    { "NameDefaultText", "nametext" },
    { "NameCulture", "it-IT" },
    { "NameText", "namelangtext" },
    { "DescriptionDefaultText", "desctext" },
    { "DescriptionCulture", "it-IT" },
    { "DescriptionText", "desclangtext" },
    { "CheckInUsed", "" }
};


3 commentaires

Avez-vous essayé votre code?


Peut-être devriez-vous utiliser une classe ou une structure.


Vous traitez avec la perchage de données LDAP ou LDIF?


3 Réponses :


8
votes

premier off: strong>

Si vous ne connaissez pas le type de valeur ou la touche em>, n'utilisez pas le dictionnaire générique. P >

.NET Les génériques sont mieux adaptés lorsque vous connaissez les types à l'avance. .NET fournit également un ensemble complet de collections à utiliser lorsque vous souhaitez stocker un "sac mélangé" d'objets de types différents. P>

Dans ce cas, l'équivalent du dictionnaire serait le hashtable . p>

Vérifiez le System.Collections (plutôt que System.Collections.Generic) Espace de noms à Voir le reste des options que vous avez. p>

Si vous connaissez le type de la clé, ce que vous faites est la bonne façon. em> p>

Deuxièmement: strong> p>

Lorsque vous récupérez la valeur ... Vous allez avoir besoin de renvoyer l'objet à son type d'origine: p>

// To get the first value
long id = ((long[])defaultAmbience["CountryId"])[0];


4 commentaires

L'utilisation de types non génériques ne va pas aider ici vraiment - il a toujours besoin de faire la fonte, etc. et il sait que les clés vont être des cordes, alors il bénéficie effectivement d'utiliser des versions génériques.


Quel est le problème avec Dictionnaire ? Pour moi, cela montre beaucoup plus clairement l'intention de stocker des objets mixtes. En outre, il vous empêche d'essayer d'utiliser une clé non chaîne (voir aussi Stackoverflow.com/questions/1433713/... )


@ 0xa3 - rien. J'ai mis à jour ma réponse. Ce qu'il fait maintenant, c'est bien tant qu'il connaît le type de la clé.


Merci pour l'aide longue! Je connais les types, les clés, les valeurs à l'avance de temps afin que le dictionnaire me convienne bien. Merci à tous pour le flot de réponses rapides, vraiment apprécié !! À votre santé



2
votes

Vous auriez besoin de fournir la distribution où vous l'appelez.

((long[])defaultAmbience["countryID"])[0];


0 commentaires

1
votes

Dans ce cas, c # ne sait pas vraiment quel type vous attendez-vous, vous devez donc vous lancer au bon type après la prise du dictionnaire et avant de l'utiliser. Dans le cas de cette longue array, ce serait:

((long[])defaultAmbience["CountryId"])[0]


0 commentaires