Приблизительная реализация Dictionary - C#
Формулировка задачи:
Приветствую!
Необходима помощь просветлённых в следующей задаче -
Насколько я понимаю, то для foreach надо класс пронаследовать от интерфейсов IEnumerable, IEnumerator, IEnumerable<T>, IEnumerator<T>, IDisposable и ессно реализовать соответствующие методы и св-ва.
Вот на этом и случился затык. Как хотя бы должны выглядеть оба метода GetEnumerator ?
Заранее большое спасибо!
Используя Visual Studio 2010, создайте проект по шаблону Console Application. Создайте коллекцию MyDictionary<TKey,TValue>. Реализуйте в простейшем приближении возможность использования ее экземпляра аналогично экземпляру класса Dictionary<TKey,TValue>. Минимально требуемый интерфейс взаимодействия с экземпляром, должен включать метод добавления элемента, индексатор для получения значения элемента по указанному индексу и свойство только для чтения для получения общего количества элементов. Реализуйте возможность перебора элементов коллекции в цикле foreach.
До момента реализации foreach вроде всё сделалusing System;
using System.Collections;
using System.Collections.Generic;
namespace ch15ex3
{
class MyDictionary<Tkey, Tval>
{
private int counter = 0;
private Tkey[] keysArray = null;
private Tval[] valsArray = null;
public int Counter
{
get { return this.counter; }
}
public void Add(Tkey key, Tval val)
{
this.counter++;
Array.Resize(ref keysArray, counter);
keysArray[counter - 1] = key;
Array.Resize(ref valsArray, counter);
valsArray[counter - 1] = val;
}
public Tval this[Tkey key]
{
get
{
int ind = 0;
for(int i = 0; i < keysArray.Length; i++)
{
if (key.Equals(keysArray[i]))
ind = i;
}
return valsArray[ind];
}
}
}
} Решение задачи: «Приблизительная реализация Dictionary»
textual
Листинг программы
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
for (int i = 0; i < keysArray.Length; i++)
yield return new KeyValuePair<TKey, TValue>(keysArray[i], valsArray[i]);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}