对象创建:如何保留控件来代替关键字“new”

时间:2010-12-19 21:07:57

标签: c#

我想在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关键字。

4 个答案:

答案 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);
    }
}