2013-03-24 2 views
-6

У меня есть серия списков, я хочу создать метод, который найдет список по его имени и вернет список. Списки хранятся внутри самого класса.Найти список по его названию C#

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

Пожалуйста, сохраните код для простейших методов ..

+1

Что вы уже пробовали? – evgenyl

+1

Возможно, вам следует показать, как хранятся списки и где это имя входит? Является ли это именем списка или именем судна в списке или тем, что вы ищете? Вы уже пытались его реализовать? Если да, то как выглядел этот код? –

+0

Привет, Извините, если я не ясно списки хранятся в классе, то построенные в классе так: класса линкор { // Атрибуты, Корабли игрока частный Список _playerCarrierA; частный Список _playerDestroyerA; public Battleship() { _playerCarrierA = новый Список (); _playerDestroyerA = новый Список (); } Существует намного больше списков, в основном я хочу, чтобы метод извлекал список по его имени, а затем добавлял строку в этот список. Я пробовал много методов, ни один из них не был успешным. – Kehza

ответ

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

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

-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 в вашем коде

 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

Смежные вопросы