2010-10-17 61 views
1

我有一个客户端和一个服务器程序,而且我正在使用哈希表来存储客户端连接时的名称和IP地址。我现在需要添加客户端连接时发送给服务器的另一个变量,但据我了解,哈希表只有2列(键和值)。有没有另一种方式可以存储这些数据而不是使用哈希表?存储数据集的最佳方式(在一张表中)

回答

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

辉煌的,我有这个工作和输入的数据,但我怎么会读取数据?用户名部分很简单,但第二个字段是一个类。我会用什么语法来提取这些数据? – 2010-10-17 13:46:32

+0

你会施放对象,所以((User)userTable [“Fred”]) – jimplode 2010-10-17 14:58:01

+0

我仍然无法让它工作。当我只使用字典的名称时,找不到它,但是当我使用该字典所在的类的名称(用户名)之前,第一个“用户”变为下划线,并表示它无法将其转换为“字符串”。整个程序在这里:http://csharp.pastebin.com/0ESB4RYB – 2010-10-17 19:33:40

1

你可以专门创建一个新的class用于例如sotring此信息

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

而不是使用一个哈希表,只需将Client类的实例存储到Session对象(或任何你使用存储哈希表)。

如果你需要存储一个以上的客户的详细信息,然后使用List<Client>或字典,如果您需要使用键来查找项目。试着看看对你有用。

0

我不确定这是最好的解决方案,但只是一般的知识,如果你真的需要一个表,你可以使用ADO.NET(它是.NET本地的)的一部分DataTable Class

这是不可取的原因是它不支持作为字典的唯一键,并且它通常会使场景中的事情复杂化。

相关问题