我无法在哈希表中添加
I can not add in 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:
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 中做同样的事情时,他根本不添加。
如何让它发挥作用?
我试过列表、字典、元组,都有同样的问题。
我的第一个 ConsoleWrite return“3”,第二个在 TcpManager return“3”也是,什么时候应该 return“6”。
谢谢大家,再次为我的英语感到抱歉。
您将 Users
class 中的哈希表声明为实例字段。这意味着 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());
使用用户 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;
}
}
用法
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;
}
}
用法
Users.Instance
是唯一会被创建的用户实例,因为构造函数是私有的,并且仅在 Instance
-属性.
中使用
var users = Users.Instance;
users.addNewUser(1, "Vera");
users.countUsers();
试试这个方法:
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
}
首先,抱歉我的英语不好。
我有这个:
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:
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 中做同样的事情时,他根本不添加。
如何让它发挥作用? 我试过列表、字典、元组,都有同样的问题。
我的第一个 ConsoleWrite return“3”,第二个在 TcpManager return“3”也是,什么时候应该 return“6”。
谢谢大家,再次为我的英语感到抱歉。
您将 Users
class 中的哈希表声明为实例字段。这意味着 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());
使用用户 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;
}
}
用法
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;
}
}
用法
Users.Instance
是唯一会被创建的用户实例,因为构造函数是私有的,并且仅在 Instance
-属性.
var users = Users.Instance;
users.addNewUser(1, "Vera");
users.countUsers();
试试这个方法:
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
}