C# 对象创建:如何保留控件以代替关键字';新';
我想在两个函数使用的哈希表中添加值,当我使用'new'关键字时,哈希表的所有值都变为零或该表变为空。我正在使用以下代码:C# 对象创建:如何保留控件以代替关键字';新';,c#,C#,我想在两个函数使用的哈希表中添加值,当我使用'new'关键字时,哈希表的所有值都变为零或该表变为空。我正在使用以下代码: Hashtable ht; public void AddToList(string ItemNo) { ht = Hashtable(); ht.Add(ItemNo, ItemNo); // Below lines are only for testing IDictionaryEnumerator en = ht.GetEnumera
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);
}
我想我必须使用关键字“preserve”或类似的东西,而不是
new
关键字。你能显示整个类吗
在RemoveFromList
中,您正在创建一个新的本地哈希表,而不是在AddToList
中使用相同的哈希表。如果您已经创建了一个哈希表并将其分配给ht
,并且ht
是类的成员变量,那么您不需要每次都创建它
如果我正确地假设了您的代码(请发布整个类),那么只需从RemoveFromList
中删除这一行即可:
HashTable ht = new HashTable();
你能给全班看吗 在
RemoveFromList
中,您正在创建一个新的本地哈希表,而不是在AddToList
中使用相同的哈希表。如果您已经创建了一个哈希表并将其分配给ht
,并且ht
是类的成员变量,那么您不需要每次都创建它
如果我正确地假设了您的代码(请发布整个类),那么只需从RemoveFromList
中删除这一行即可:
HashTable ht = new HashTable();
您不应该在Add方法内创建新的哈希表
替换为以下内容:
Hashtable ht = new HashTable(); // create 1x
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
您发布的代码在使用例如DataContext时是有效的,因为它只是backingstore的入口。您的哈希表是backingstore,因此不要每次都创建一个新的(空的)哈希表 不应在Add方法内创建新的哈希表
替换为以下内容:
Hashtable ht = new HashTable(); // create 1x
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
您发布的代码在使用例如DataContext时是有效的,因为它只是backingstore的入口。您的哈希表是backingstore,因此不要每次都创建一个新的(空的)哈希表 是,“new”将创建一个新对象—在本例中是一个空哈希表。因此,解决方案是只使用“new”一次,这样您就只能创建一个对象
使用您的代码,最简单的方法是将其更改为:
Hashtable ht = new Hashtable();
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
public void RemoveFromList(string ItemNo)
{
ht.Remove (ItemNo);
}
但是,我必须问一下,为什么要在这里使用哈希表。如果您正在编写的实际代码不太复杂,那么泛型列表可能更适合,或者如果您不能使用足够新的.Net版本,则使用ArrayList。是,“new”将创建一个新对象—在本例中是一个空哈希表。因此,解决方案是只使用“new”一次,这样您就只能创建一个对象
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);
}
}
使用您的代码,最简单的方法是将其更改为:
Hashtable ht = new Hashtable();
public void AddTOList(string ItemNo)
{
ht.Add(ItemNo, ItemNo);
}
public void RemoveFromList(string ItemNo)
{
ht.Remove (ItemNo);
}
但是,我必须问一下,为什么要在这里使用哈希表。如果您正在编写的实际代码不太复杂,那么通用列表可能更适合,或者如果您不能使用足够新版本的.Net,则使用ArrayList
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);
}
}
或(首选):
或(首选):
嗨,马特,谢谢你的回答我在发帖之前也试过了,但是当函数调用它show“对象引用未设置为对象实例”嗨,马特,谢谢你的回答我在发帖之前也试过,但是当函数调用它show“对象引用未设置为对象实例”时你想检查null,而不是notnull,第二个版本从不实例化ht。@马特:哈哈,真有趣。一篇文章中有3个打字错误。谢谢!:)你想检查null,而不是notnull,第二个版本从不实例化ht。@马特:哈哈,真有趣。一篇文章中有3个打字错误。谢谢!:)欢迎来到SO。也许看到也欢迎这样。也许你也看到了