我想在Hashtable中添加值,当我使用'new'关键字时,两个函数使用Hashtable的所有值变为零或表变为空。我使用以下代码:
Hashtable ht;
public void AddToList(string ItemNo)
{
ht = Hashtable();
ht.Add(ItemNo, ItemNo);
// Below lines are only for testing
IDictionaryEnumerator en = ht.GetEnumerator();
while (en.MoveNext())
{
string str = en.Value.ToString();
MessageBox.Show(str);
}
}
删除我使用的数据:
public void RemoveFromList(string ItemNo)
{
Hashtable ht = new Hashtable();
ht.Remove(ItemNo);
}
我想我必须使用关键字“保留”或类似的内容而不是new
关键字。
答案 0 :(得分:2)
你应该不在Add方法中创建一个新的HashTable。
替换为:
Hashtable ht = new HashTable(); // create 1x
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
使用例如DataContext时,您发布的代码有效,因为它只是备份库的门户。您的Hashtable是后备存储,因此不要每次都创建一个新的(空)。
答案 1 :(得分:1)
你能展示全班吗?
在RemoveFromList
中,您要创建一个新的本地HashTable,而不是在AddToList
中使用相同的HashTable。如果您已经创建了HashTable并将其分配给ht
,并且ht
是该类的成员变量,那么您不需要每次都创建它。
如果我已正确使用您的代码(请发布整个课程),那么只需从RemoveFromList
删除此行:
HashTable ht = new HashTable();
答案 2 :(得分:1)
是的,“new”将创建一个新对象 - 在这种情况下是一个空的Hashtable。所以解决方案是只使用“new”一次,这样你就只能创建一个对象。
使用您的代码,最简单的方法是将其更改为:
Hashtable ht = new Hashtable();
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
public void RemoveFromList(string ItemNo)
{
ht.Remove (ItemNo);
}
但是,我不得不问你为什么要在这里使用Hashtable。如果您编写的实际代码并不复杂,那么通用列表可能更合适,如果您不能使用足够新版本的.Net,则可以使用ArrayList。
答案 3 :(得分:0)
class FooBar
{
private Hashtable ht = null;
public void AddToList(string ItemNo)
{
if (ht == null)
ht = new Hashtable();
ht.Add(ItemNo, ItemNo);
}
public void RemoveFromList(string ItemNo)
{
if (ht == null)
ht = new Hashtable();
ht.Remove(ItemNo);
}
}
或(最优选):
class FooBar
{
private Hashtable ht = new Hashtable();
public void AddToList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
public void RemoveFromList(string ItemNo)
{
ht.Remove(ItemNo);
}
}