2013-03-24 99 views
-6

列表我有一系列的名單,我想創建一個將找到它的名稱列表,並返回列表的方法。這些列表存儲在類本身中。查找其名稱C#

public void AddCord(string cord, string listName) 
    { 
     List<String> myShip; 
     myShip = findListByName(listName); 
     myShip.Add(cord); 
    } 

請保持代碼的最簡單的方法..

+1

你已經試過了什麼? – evgenyl 2013-03-24 12:31:46

+1

也許你應該展示這些列表是如何存儲的以及這個名字的來源?它是列表的名稱,還是列表中某艘船的名稱,或者是您要搜索的內容?您是否嘗試過實施它?如果是這樣,代碼是什麼樣的? – 2013-03-24 12:31:53

+0

你好,對不起,如果我不清楚 的列表存儲在類,然後在類中構造像這樣: 級戰列艦 {// 屬性,玩家船舶 私人列表 _playerCarrierA; 私人列表 _playerDestroyerA; 公共戰艦() { _playerCarrierA =新列表(); _playerDestroyerA =新列表(); } 有比這更多的名單,基本上我想要檢索其名稱的列表的方法,然後將字符串添加到該列表。 我已經嘗試了很多方法,沒有一個是成功的。 – Kehza 2013-03-24 12:45:55

回答

2

試試這個:

//Create global dictionary of lists 
Dictionary<string, List<string> dictionaryOfLists = new Dictionary<string, List<string>(); 

//Get and create lists from a single method 
public List<string> FindListByName(string stringListName) 
{ 
    //If the list we want does not exist yet we can create a blank one 
    if (!dictionaryOfLists.ContainsKey(stringListName)) 
     dictionaryOfLists.Add(stringListName, new List<string>()); 

    //Return the requested list 
    return dictionaryOfLists[stringListName]; 
} 
+0

哦,輝煌的,這可能只是工作:D感謝虐待現在嘗試它 – Kehza 2013-03-24 12:47:50

1
Dictionary<string, List<string>> myRecords=new Dictionary<string, List<string>>(); 

if(!myRecords.ContainsKey("abc")) 
{ 
    List<string> abcList=new List<string>(); 
    myRecords.Add("abc", abcList); 
} 
else 
    myRecords.["abc"].Add("a"); 
+0

非常感謝,從來沒有遇到字典之前:) – Kehza 2013-03-24 12:55:09

-1

這就是我的回答,在我眼裏多了幾分樂趣一個解決方案:d

class MyList<T> : List<T> 
{ 
    static List<object> superlist; 

    public string name; 

    ~MyList() { 
     if (superlist != null) 
     superlist.Remove(this); 
    } 

    public MyList(string name) 
     : base() { 
     init(name); 
    } 

    public MyList(string name, int cap) 
     : base(cap) { 
     init(name); 
    } 

    public MyList(string name, IEnumerable<T> IE) 
     : base(IE) { 
     init(name); 
    } 

    void init(string name) { 
     if (superlist == null) 
      superlist = new List<object>(); 

     this.name = name; 
     superlist.Add(this); 
    } 

    public static void AddToListByName(T add, string listName) { 
     for (int i = 0; i < superlist.Count; i++) { 
      if (superlist[i].GetType().GenericTypeArguments[0] == add.GetType() && ((MyList<T>)(superlist[i])).name == listName) { 
       ((MyList<T>)(superlist[i])).Add(add); 
       return; 
      } 
     } 
     throw new Exception("could not find the list"); 
    } 

} 

現在你可以很容易地使用它和cle anly in your code

 MyList<string> a = new MyList<string>("a"); 
     MyList<string> b = new MyList<string>("b"); 

     a.Add("normal add to list a"); 

     MyList<string>.AddToListByName("hello add to a", "a"); 
     MyList<string>.AddToListByName("hello add to b", "b"); 
+0

我認爲使用靜態方法是一個巨大的代碼氣味。有一個析構函數*真的會引發紅旗 – ANeves 2015-01-29 12:22:31