我无法添加Hashtable

时间:2015-07-03 05:07:12

标签: c# hashtable

首先,抱歉我的英语不好。

我有这个:

public static Users server = new Users();

static void Main(string[] args)
{
    server.addNewUser(1, "John");
    server.addNewUser(2, "Marlon");
    server.addNewUser(3, "Lucas");
    Console.WriteLine(server.countUsers()); //COUNT USERS

    TcpManager manager = new TcpManager(58636, 500);

    Console.Read();
}

TcpManager:

public Users test = new Users();
internal TcpManager(int port, int maxuserson)
{
    test.addNewUser(4, "Julio");
    test.addNewUser(5, "Marcelo");
    test.addNewUser(6, "Andre");
    Console.WriteLine(test.countUsers()); //COUNT USERS
}

和我的用户类:

class Users
{
    Hashtable users = new Hashtable();

    public void addNewUser(int id, string name)
    {
        if (!users.ContainsKey(id))
            users.Add(id, name);
        else users[id] = name;
    }

    public int countUsers()
    {
        return users.Count;
    }
}

我的问题是,当我在Main上添加User时,它可以工作! 但是当我尝试在TcpManager中做同样的事情时,他根本就没有添加。

如何让它发挥作用? 我尝试使用List,Dictionary,Tuple,都有同样的问题。

我的第一个ConsoleWrite返回“3”,而TcpManager中的第二个返回“3”,何时返回“6”。

谢谢大家,再次,对不起我的英语。

2 个答案:

答案 0 :(得分:1)

您将UIViewController类中的Hashtable声明为实例字段。这意味着Users的每个实例都有自己的哈希表。因此,您的程序行为与预期的一样。

有几种方法可以让它以您想要的方式工作。

使Users静态

Users

用法

static class Users
{
    private static Hashtable users;

    static Users()
    {
       users = new Hashtable();
    }

    public static void addNewUser(int id, string name)
    {
        if (!users.ContainsKey(id))
            users.Add(id, name);
        else users[id] = name;
    }

    public static int countUsers()
    {
        return users.Count;
    }    
}

使用用户Users.addNewUser(1, "Vera"); Console.WriteLine(Users.countUsers()); 静态(基本上,这是Monostate模式)

Hashable

用法

class Users
{
    private static Hashtable users = new HashTable();

    public void addNewUser(int id, string name)
    {
        if (!users.ContainsKey(id))
            users.Add(id, name);
        else users[id] = name;
    }

    public int countUsers()
    {
        return users.Count;
    }    
}

使用Singleton

var users = new Users();
users .addNewUser(1, "Vera");
Console.WriteLine(users.countUsers());

用法

class Users { private Hashtable users; private static Users instance; private Users() { users = new HashTable(); } public static Users Instance { get { if (instance == null) instance=new Users(); return instance; } } public void addNewUser(int id, string name) { if (!users.ContainsKey(id)) users.Add(id, name); else users[id] = name; } public int countUsers() { return users.Count; } } 是将要创建的唯一用户实例,因为ctor是私有的,仅用于Users.Instance - 属性。

Instance

答案 1 :(得分:1)

尝试这种方式:

TcpManager manager = new TcpManager(58636, 500);

test.addNewUser(4, "Julio");
test.addNewUser(5, "Marcelo");
test.addNewUser(6, "Andre");

Console.WriteLine(manager.test.countUsers()); // 6

在TcpManager构造函数中:

internal TcpManager(int port, int maxuserson)
{
    // This code will executed when you call  new TcpManager();
    // So, you have to add 1, 2 and 3 ids first.
    manager.test.addNewUser(1, "John");
    manager.test.addNewUser(2, "Marlon");
    manager.test.addNewUser(3, "Lucas");
    Console.WriteLine(test.countUsers()); //COUNT USERS: 3
}