C# 我无法在哈希表中添加

C# 我无法在哈希表中添加,c#,hashtable,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()); //COU

首先,对不起我的英语不好

我有这个:

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上添加一个用户时,它会工作! 但当我尝试在TcpManager中执行同样的操作时,他根本没有添加

如何让它工作? 我试着用列表、字典、元组,所有的问题都是一样的

我的第一个控制台写入返回“3”,TcpManager中的第二个也返回“3”,什么时候应该返回“6”


谢谢大家,再次为我的英语道歉。

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

有几种方法可以让它按照你想要的方式工作

使
用户
静态 用法 使用用户
Hashable
static(本质上,这是单状态模式) 用法 使用单例 用法
Users.Instance
是将要创建的唯一一个用户实例,因为ctor是私有的,并且只在
Instance
-属性中使用

var users = Users.Instance;
users.addNewUser(1, "Vera");
users.countUsers();
试着这样做:

TcpManager管理器=新的TcpManager(58636500);
测试。添加新用户(4,“Julio”);
测试。添加新用户(5,“Marcelo”);
测试。添加新用户(6,“Andre”);
Console.WriteLine(manager.test.countUsers());//6.
在TcpManager构造函数中:

内部TcpManager(int-port,int-maxuserson)
{
//调用新的TcpManager()时将执行此代码;
//因此,您必须先添加1、2和3个ID。
manager.test.addNewUser(1,“John”);
经理。测试。添加新用户(2,“马龙”);
经理。测试。添加新用户(3,“卢卡斯”);
Console.WriteLine(test.countUsers());//计数用户:3
}

为什么要返回6?测试对象和服务器是独立的,具有独立的哈希表。添加到一个并不添加到另一个?main方法和TcpManager使用不同的
用户实例。main方法使用静态实例,而TcpManager使用本地成员实例。从TcpManager首次调用时,哈希表为空。将静态实例传递给
TcpManager
,它应该可以工作。我正在尝试创建一个可以在代码中任何位置访问和添加的用户列表,我尝试在TcpManager中创建一个静态空白,并添加用户,但不起作用。有没有更简单的方法来创建来自多个用户的数据列表?哦,天哪,我尝试了一切,这是有效的。非常感谢我再给我的答案补充一些,让你注意到,还有一些其他问题再次感谢你。。现在变得容易多了,
Users.addNewUser(1, "Vera");
Console.WriteLine(Users.countUsers());
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;
    }    
}
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;
    }    
}
var users = Users.Instance;
users.addNewUser(1, "Vera");
users.countUsers();