【问题标题】:Best way to store sets of data (In a table)存储数据集的最佳方式(在表中)
【发布时间】:2010-10-17 12:33:33
【问题描述】:

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

【问题讨论】:

    标签: c# client hashtable


    【解决方案1】:

    您可以将对象粘贴到哈希表或字典中。

    所以让你自己成为一个具有某种描述的用户类,然后将你的用户对象以他们的名字存储在你的字典中。

    这将有助于在您需要添加其他属性时使用它们。

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

    类似的东西

    【讨论】:

    • 太棒了,我可以使用它来输入数据,但是我将如何读取数据呢?用户名部分很简单,但第二个字段是一个类。我将使用什么语法来提取这些数据?
    • 在winforms中你可以绑定到集合,例如使用listview你可以做如下的事情:listbox.DataSource = myCollection;然后设置 id 和显示属性,例如 listbox.DisplayMember = "Name"; listbox.ValueMember = "IP 地址";那么你会调用 listbox.DataBind();有很多教程,codeproject.com/KB/database/scomlistcontrolbinding.aspx 是我在 google 之后找到的第一个。
    • 对不起,我的错,你不需要 DataBind() 方法。
    • listbox.DataSource = userDict.Values.ToList(); listbox.DisplayMember = "名称"; listbox.ValueMember = "IP 地址";
    • 试试看,我刚刚做了一个这样的随机集合: userDict.Add("Jim", new User() { Name = "Jim", IPAddress = "127.0.0.1", Status = "状态1" });然后使用它上面的代码,底部框填充了名称。
    【解决方案2】:

    您可以创建一个新的class 专门用于存储此信息,例如

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

    不使用 HashTable,只需将 Client 类的实例存储到 Session 对象(或任何您用来存储 HashTable 的对象)中。

    如果您需要存储多个客户的详细信息,请使用List&lt;Client&gt;,如果您需要使用键来查找项目,请使用字典。试验一下,看看什么对你有用。

    【讨论】:

      【解决方案3】:

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

      不建议这样做的原因是它不支持作为字典的唯一键,而且它通常会使您的场景中的事情变得复杂。

      【讨论】:

        猜你喜欢
        • 2016-06-27
        • 2014-07-28
        • 2016-07-19
        • 2020-07-09
        • 2013-05-29
        • 2010-09-12
        • 1970-01-01
        • 2012-04-18
        • 2012-07-27
        相关资源
        最近更新 更多