2011-05-16 99 views
0

我已經聲明瞭一個列表來動態創建我的類對象。使用密鑰訪問集合項目

List<clsFormula> oFormula = new List<clsFormula>(); 
for (int i = 0; i < 4; i++) 
{ 
    oFormula.Add(new clsFormula()); 
} 

當我想要使用對象編號2的功能,我會寫我的代碼就像

oFormula[2].FunctioName(); 

我的問題是:我可以直接定義一個名稱爲對象,而不是使用數量?所以它會像oFormula["StringName"].FunctionName();當我聲明運行時對象時,我應該使用什麼樣的代碼?

+0

您可以嘗試使用'Dictionary '而不是使用'list ' – Menahem 2011-05-16 08:06:09

+0

這是可行的〜! 'Dictionary of = new Dictionary (); of.Add(「Plus」,new clsFormula()); (「+」,1,2).ToString());' – Hero 2011-05-16 09:22:12

+0

是的,但是在插入字典時需要知道該項目的名稱。 KeyedCollection將其封裝到集合本身中。 – MattDavey 2011-05-16 12:18:45

回答

0

意識到它不是java,但是隨着我達到刪除限制而將其打開。


如果它的java。

List保存數據並將其與索引進行映射。爲您的要求,您需要使用java.util.Map

Map<String, clsForumla> map = new Map<String, clsForumla>(); 
map.put("firstObj",new clsForumla()); 
map.put("secondObj",new clsForumla()); 
map.put("thirdObj",new clsForumla()); 


//calling method on second object 

map.get("secondObj").foo(); 
+0

這不是Java,因爲他稱之爲「添加」。用大寫字母開頭的方法名更像是微軟的事。 – Neil 2011-05-16 07:33:06

+0

@尼爾從歷史中看來似乎是微軟的傢伙。感謝 – 2011-05-16 07:34:43

0

名單不具有使用字符串參數的索引。您可以從List<T>繼承並創建一個接受字符串的索引器,並且您需要實現查找和返回該項目的邏輯。

public class SampleList<T> : List<T> 
{ 
public T this(string name) 
{ 
get 
{ 
//Find the Item and return. 
} 
} 
} 
+0

更好地從KeyedCollection實現,該KeyedCollection具有名稱索引器內置.. – MattDavey 2011-05-16 08:02:14

1

創建一個新的集合類型並從System.Collections.ObjectModel.KeyedCollection繼承它。重寫GetKeyForItem方法並返回clsFormula對象的名稱。

http://msdn.microsoft.com/en-us/library/ms132438.aspx

public class clsFormulaCollection : KeyedCollection<string, clsFormula> 
{ 
    protected override string GetKeyForItem(clsFormula item) 
    { 
     return item.Name; 
    } 
} 

clsFormulaCollection oFormula = new clsFormulaCollection(); 

for (int i = 0; i < 4; i++) 
{ 
    oFormula.Add(new clsFormula()); 
} 

oFormula["FormulaName"].SomeFunction(); 
+0

我使用Framework3.5我認爲KeyCollection只適用於framework4.0。 – Hero 2011-05-16 09:13:51

+0

自.NET 2.0以來,KeyedCollection已經可用 – MattDavey 2011-05-16 09:49:42

0

此代碼的工作對我很好,

我已經爲您的解決方案示例應用程序,

我有如下的一類,

public class ClsFormula 
{ 
    public ClsFormula() 
    { 

    } 

    public int Function1() 
    { 
     return 5 + 6; 
    } 
} 

現在我使用這個類作爲點擊事件之一,製作lis噸的類對象,

List<ClsFormula> clsformula = new List<ClsFormula>(); 

     for (int i = 0; i < 4; i = i + 1) 
     { 
      ClsFormula objcls = new ClsFormula(); 
      clsformula.Add(objcls); 
     } 

     MessageBox.Show(clsformula[2].Function1().ToString()); 

它適用於我的罰款。