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();