Доступ к элементу коллекции с помощью ключа - PullRequest
0 голосов
/ 16 мая 2011

Я объявил список для динамического создания моего объекта класса.

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

Когда я хочу использовать функцию из объекта № 2, я напишу свой код как

oFormula[2].FunctioName(); 

Мой вопрос: могу ли я определить имя непосредственно в объекте вместо использования числа? так было бы как oFormula["StringName"].FunctionName(); какой код я должен использовать при объявлении объекта времени выполнения?

Ответы [ 4 ]

1 голос
/ 16 мая 2011

Создайте новый тип коллекции и унаследуйте его от 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 голосов
/ 16 мая 2011

у меня этот код отлично работает,

Я создал образец приложения для вашего решения,

У меня есть класс, как показано ниже,

public class ClsFormula
{
    public ClsFormula()
    {

    }

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

теперь я использую этот класс для одного из событий щелчка, делая список объекта класса,

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());

у меня нормально работает.

0 голосов
/ 16 мая 2011

В списке нет индексатора, который использует строковый параметр. Вы можете наследовать от List<T> и создать индексатор, который принимает строку, и вам необходимо реализовать логику для поиска и возврата элемента.

public class SampleList<T> : List<T>
{
public T this(string name)
{
get
{
//Find the Item and return.
}
}
}
0 голосов
/ 16 мая 2011

Поймите, что это не 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...