J'ai un client et un programme serveur, et j'utilise actuellement des tables de hachage pour stocker les noms et l'adresse IP des clients lorsqu'ils se connectent. J'ai maintenant besoin d'ajouter une autre variable que le client enverra au serveur quand il se connecte, mais autant que je le comprends, hashtables ont seulement 2 colonnes (clé et valeur). Existe-t-il un autre moyen de stocker ces données au lieu d'utiliser des tables de hachage?Meilleure façon de stocker des ensembles de données (dans un tableau)
Répondre
Vous pouvez coller des objets dans des tables de hachage ou des dictionnaires.
Donc, faites vous-même une classe d'utilisateurs de quelque description, puis stockez votre objet utilisateur dans votre dictionnaire sous leur nom.
Cela se prêterait alors à prendre d'autres propriétés au fur et à mesure que vous deviez les ajouter.
public class User
{
public string Name { get; set; }
public string IPAddress { get; set; }
public string AnotherProperty { get; set;}
}
Dictionary<string, User> userTable = new Dictionary<string, User>();
userTable.Add(userName, new User(){Name = "fred", IPAddress = "127.0.0.1", AnotherProperty = "blah"});
Quelque chose comme ça
Vous pouvez créer un nouveau class
spécifiquement pour sotring cette information par exemple
public class Client
{
private string Name { get; set;}
private string IP { get; set;}
//... etc.
}
Au lieu d'utiliser une table de hachage, placez simplement une instance de la classe Client
dans l'objet Session
(ou quel que soit votre utilisation pour stocker Hashtable.)
Si vous devez stocker les détails de plus d'un client , puis utilisez un List<Client>
ou un dictionnaire si vous devez utiliser les touches pour rechercher des éléments. Expérimentez pour voir ce qui fonctionne pour vous.
Je ne suis pas sûr que c'est la meilleure solution, mais juste pour la connaissance générale, si vous avez vraiment besoin d'une table, vous pouvez utiliser DataTable Class qui fait partie de ADO.NET (qui est natif à .NET).
La raison pour laquelle cela est déconseillé est qu'il ne prend pas en charge les clés uniques, en tant que dictionnaire, et qu'il complique généralement les choses dans votre scénario.
Génial, j'ai tout ce qu'il faut pour travailler et saisir les données, mais comment lire les données? La partie du nom d'utilisateur est assez facile, mais le deuxième champ est une classe. Quelle syntaxe utiliserais-je pour extraire ces données? –
Vous lanceriez l'objet, donc ((Utilisateur) userTable ["Fred"]) – jimplode
Je n'arrive toujours pas à le faire fonctionner. Quand je n'utilise que le nom du dictionnaire, il ne le trouve pas, mais quand j'utilise le nom de la classe dans laquelle se trouve le dictionnaire avant (Utilisateurs.), Le premier 'Utilisateurs' est souligné et dit qu'il ne peut pas le convertir en 'chaîne'. Tout le programme est ici: http://csharp.pastebin.com/0ESB4RYB –