04. november 2006 - 23:48Der er
7 kommentarer og 1 løsning
Enumeration, GetEnumerator, C#
Hej Eksperter
Jeg har ret svært ved at forstå idé'en i 'Enumeration' generelt. Jeg kan forstå at det er en teknik .NET bruger til at iterere igennem en collection (?) - men hvorfor og hvordan kan jeg ikke lige gennemskue. Og så tænkte jeg at der måske var en herinde der kunne forklare dette.
Jeg kan f.eks. ikke finde ud af hvad metoden GetEnumerator(), i nedenstående kode, skal indeholde. P.t. kaster den jo bare en Exception. Så hvordan får jeg den til at iterere igennem en ArrayList i en Generic class?
public class MyList<T> : IEnumerable { private ArrayList _innerList = new ArrayList();
public void Add(T val) { _innerList.Add(val); }
#region IEnumerable Members
public IEnumerator GetEnumerator() { throw new Exception("The method or operation is not implemented."); }
#endregion }
class Program { static void Main(string[] args) { MyList<int> myIntList = new MyList<int>(); myIntList.Add(1); myIntList.Add(2); myIntList.Add(3);
foreach (int i in myIntList) { Console.WriteLine(i); }
Nu virker det så, men der er noget jeg ikke helt forstår. Måske kan du forklare mig det: myIntList.Add() indsætter en integer i den private ArrayList _innerList, og det er jo fint. Disse værdier/integers kan jeg så få ud direkte med f.eks.: Console.Writeline(myIntList[0]); - men hvorfor kan jeg det uden at angive ArrayListens navn (_innerList)?
Men det virker fint med Console.Writeline(myIntList[0]); Spørgsmålet er hvorfor. Jeg fortæller jo ikke klassen at jeg vil have værdien ud af _innerList.
Det gør ingen forskel om jeg tilføjer:
public T this[int index] { get { return (T)_innerList[index]; } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.