Genel olmayan IEnumerable'ın nasıl uygulanacağını biliyorum, şöyle:
using System;
using System.Collections;
namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
MyObjects myObjects = new MyObjects();
myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 };
myObjects[1] = new MyObject() { Foo = "World", Bar = 2 };
foreach (MyObject x in myObjects)
{
Console.WriteLine(x.Foo);
Console.WriteLine(x.Bar);
}
Console.ReadLine();
}
}
class MyObject
{
public string Foo { get; set; }
public int Bar { get; set; }
}
class MyObjects : IEnumerable
{
ArrayList mylist = new ArrayList();
public MyObject this[int index]
{
get { return (MyObject)mylist[index]; }
set { mylist.Insert(index, value); }
}
IEnumerator IEnumerable.GetEnumerator()
{
return mylist.GetEnumerator();
}
}
}
Bununla birlikte, IEnumerable'ın genel bir sürümü olduğunu da fark ettim IEnumerable<T>
, ancak bunu nasıl uygulayacağımı çözemiyorum.
Kullanım using System.Collections.Generic;
yönergelerime ekler ve sonra değiştirirsem:
class MyObjects : IEnumerable
için:
class MyObjects : IEnumerable<MyObject>
Ve sonra sağ tıklayıp IEnumerable<MyObject>
seçin Implement Interface => Implement Interface
, Visual Studio aşağıdaki kod bloğunu yardımcı bir şekilde ekler:
IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}
GetEnumerator();
Yöntemden genel olmayan IEnumerable nesnesini döndürmek bu sefer işe yaramıyor, öyleyse buraya ne yazmalıyım? CLI artık genel olmayan uygulamayı yok sayıyor ve foreach döngüsü sırasında dizim üzerinden numaralandırmaya çalıştığında doğrudan genel sürüme yöneliyor.
this.GetEnumerator()
ile basitçe geri dönmek arasında bir fark varGetEnumerator()
mı?