Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象创建:如何保留控件以代替关键字';新';_C# - Fatal编程技术网

C# 对象创建:如何保留控件以代替关键字';新';

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

我想在两个函数使用的哈希表中添加值,当我使用'new'关键字时,哈希表的所有值都变为零或该表变为空。我正在使用以下代码:

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。也许看到也欢迎这样。也许你也看到了