Besoin de table de hachage et Arraylist
Je suis en train d'utiliser quelqu'un d'autre classes C# dans mon Windows 7 Phone. Les classes à utiliser des objets de type Hashtable.
Le fichier en question a
using System.Collections;
en haut, donc je suis en supposant que la table de hachage de l'objet qu'il veut.
Lorsque j'essaie de créer ma solution, j'ai des erreurs que le type ou le nom d'espace de noms 'table de hachage' a pas pu être trouvé, il manque une directive using ou une référence d'assembly.
Dans la documentation de Microsoft de la table de hachage, je vois qu'il dit Assembly: mscorlib
Mais si j'essaie d'ajouter mscorlib par Projet>Ajouter une Référence, VS dit qu'il ne peut pas l'ajouter car il est automatiquement référencé par le système de compilation.
Ce qui me manque?
OriginalL'auteur William Jockusch | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
La non-générique collections, y compris
ArrayList
etHashTable
, ne sont pas inclus dans Silverlight.Ces classes sont maintenez-overs .Net 1.0 (qui n'ont pas de génériques) et ne doit pas être utilisé dans le nouveau code.
Au lieu de cela, vous devez utiliser le générique collections—
List<T>
etDictionary<TKey, TValue>
.OriginalL'auteur SLaks
Vous avez un peu d'options:
Changer votre importation de
using System.Collections.Generic;
et de changer à chaque utilisation d'unHashTable
àDictionary<>
etArrayList
àList<>
.Vous pourrait être en mesure de s'en tirer avec:
using HashTable = System.Collections.Generic.Dictionary<object, object>;
using ArrayList = System.Collections.Generic.List<object>;
Notez qu'à l'avenir tout responsable vous déteste pour cela.
Mais c'est mieux de refactoriser le code pour utiliser le générique collections correctement.
Créer une classe
Hashtable
dans un espace de nomsSystem.Collections
, de mettre en œuvreIDictionary<object, object>
par renvoi tout pour un intérieurDictionary<object, object>
et de mettre en œuvre les changements nécessaires dans le comportement (verrouillage, touches manquantes, etc.); Créer unArrayList
par encapsulationList<object>
. (proposé par henon)Vous pourriez ne pas avoir remarqué, mais j'ai 3 idées. Qui est horrible? Aussi, je ne suis pas sûr de ce que tu veux dire doit être pleinement qualifié.
Le
using
déclarations doivent pleinement qualifié typenames, à moins d'être placés à l'écart à l'intérieur de lanamespace
.SLkaks: Bon point. C'est presque certainement le cas que le code assez vieux pour utiliser l'ancienne collection de classes aurait
using
liste à l'extérieur de lanamespace
.+1 pour l'abominable #2 suggestion et puis, en soulignant que toute personne à la recherche sur elle dans l'avenir, pourraient bien vous souhaitons éviscéré
OriginalL'auteur Gabe
Il existe différents mscorlibs en fonction .NET framework que vous utilisez. Si vous regardez dans les "Autres Versions" liste déroulante sur la page MSDN, vous verrez
Hashtable
n'est pas une partie de Silverlight. Vous aurez besoin d'utiliser unDictionary<Object, Object>
(ou, idéalement, plus fortement typé clés et types de valeur)OriginalL'auteur Matt Greer
Système.La Collection est un héritage de la première version de .Net - pas de types génériques.
Pour corriger votre code d'utilisation Dictorany classe qui est une table de hachage à cœur,
et la Liste insted de ArrayList.
OriginalL'auteur Lukasz Madon
Il a travaillé pour moi en train de changer:
Table de hachage pour
Dictionary<object, object>
NameValueCollection pour
Dictionary<object, object>
Autre problème que j'ai rencontré est l'Encodage.L'ASCII est pas défini, j'ai trié qu'avec une fonction un stackoverflow dal a écrit:
crédits ici:
ASCIIEncoding Dans Windows Phone 7
Donc, finalement, pour revenir à l'ASCII, c'est de savoir quoi faire:
retour StringToAscii(Encodage.Unicode.GetString(le résultat.ToArray()));
OriginalL'auteur Alfonso Leon