2010-12-19 26 views
0

我想在兩個函數使用的Hashtable中添加值,當我使用'new'關鍵字時,所有Hashtable的值都變爲零或表變爲空。我米使用下面的代碼:對象創建:如何保留控件以代替關鍵字'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); 
} 

我想我必須使用關鍵字「保留」或類似的東西這個代替new關鍵字。

+0

歡迎SO。也許另請參閱http://stackoverflow.com/questions/1784824/best-c-tutorials-for-a-newbie – 2010-12-20 07:20:44

回答

1

你能展示整個班級嗎?

在您的RemoveFromList中,您正在創建新的本地HashTable,而不是使用AddToList中的同一個HashTable。如果您已經創建了一個HashTable並將其分配給ht,並且ht是該類的成員變量,則不需要每次都創建它。

如果我已經正確地假設您的代碼(請張貼整個班級),則剛剛從RemoveFromList刪除此行:

HashTable ht = new HashTable(); 
+0

嗨馬特感謝你的回答我也試過,在發佈我的問題之前,但當funcyion稱它顯示「對象引用未設置爲對象的實例「 – Farid 2010-12-19 21:15:17

2

你應該創建Add方法中一個新的哈希表。

的東西,如更換:

Hashtable ht = new HashTable(); // create 1x 
public void AddTOList(string ItemNo) 
{ 
    ht.Add(ItemNo, ItemNo); 
} 

您發佈的代碼,例如使用一個DataContext時將是有效的,因爲這只是一個門戶網站,以備份存儲。你的Hashtable是支持庫,所以不要每次都創建一個新的(空的)。

1

是的,「new」會創建一個新對象 - 在這個例子中是一個空的Hashtable。所以解決方案是隻使用「新」一次,以便您只創建一個對象。

與已存在的代碼,最簡單的方法是將其改爲:

Hashtable ht = new Hashtable(); 

public void AddTOList(string ItemNo) 
{ 
    ht.Add(ItemNo, ItemNo); 
} 

public void RemoveFromList(string ItemNo) 
{ 
    ht.Remove (ItemNo); 
} 

但是,我要問你爲什麼要在這裏所有使用一個Hashtable。如果您正在編寫的實際代碼並不複雜,那麼通用列表可能會更適合,或者如果您無法使用足夠新的.Net版本,則可以使用ArrayList。

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); 
    } 
} 
+0

要檢查爲null,而不是非null,第二個版本從不實例化ht。 – 2010-12-20 00:21:15

+0

@Matt:哈哈,好笑。在一篇文章中有3個錯別字。謝謝! :) – abatishchev 2010-12-20 07:16:30

相關問題