2010-10-17 2 views
1

У меня есть клиентская и серверная программа, и в настоящее время я использую hashtables для хранения клиентов. Имя и IP-адрес при их подключении. Теперь мне нужно добавить еще одну переменную, которую клиент будет отправлять на сервер при ее подключении, но, насколько я понимаю, hashtables имеет только 2 столбца (ключ и значение). Есть ли другой способ сохранить эти данные вместо использования hashtables?Лучший способ хранения наборов данных (в таблице)

ответ

4

Вы можете вставлять объекты в хеш-таблицы или словари.

Так что сделайте себе пользовательский класс некоторого описания, а затем сохраните свой пользовательский объект в своем словаре под своим именем.

Это позволит использовать другие свойства так же, как и когда вам нужно их добавить.

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"}); 

Что-то вроде этого

+0

Блестящий, у меня есть это, чтобы работать и вводить данные, но как бы я прочитал данные? Часть имени пользователя достаточно проста, но второе поле является классом. Какой синтаксис я использовал бы для извлечения этих данных? –

+0

Вы бы бросили объект, поэтому ((Пользователь) userTable ["Fred"]) – jimplode

+0

Я до сих пор не могу заставить его работать. Когда я использую только имя словаря, он не может его найти, но когда я использую имя класса, в котором находится словарь перед ним (Пользователи.), Первые «Пользователи» становятся подчеркнутыми и говорят, что это не может преобразовать его в строку. Вся программа находится здесь: http://csharp.pastebin.com/0ESB4RYB –

1

Вы можете создать новый class специально для sotring этой информации, например,

public class Client 
{ 
    private string Name { get; set;} 
    private string IP { get; set;} 
    //... etc. 
} 

Вместо использования HashTable, просто хранить экземпляр Client класса в Session объекта (или что-то вы используете для хранения HashTable.)

Если вам нужно хранить информацию более одного клиента , затем используйте List<Client> или словарь, если вам нужно использовать ключи для поиска элементов. Поэкспериментируйте, чтобы увидеть, что работает для вас.

0

Я не уверен, что это лучшее решение, но только для общих знаний, если вам действительно нужна таблица, вы можете использовать DataTable Class, который является частью ADO.NET (который является родным для .NET).

Причина, по которой это нецелесообразно, заключается в том, что она не поддерживает уникальные ключи, как словарь, и что это обычно усложняет ситуацию в вашем сценарии.

Смежные вопросы