öncelikle dizeleri IEnumerable üzerinde yineleme bitirdiğinizde zaman "temizleme" yürütür göstermektedir aşağıdaki kodu düşünün. İkinci geçiş, bana acı çeken şey. Sonuna ulaşmadan önce IEnumerable'ı terk etmem ve daha sonra temiz kodun çalıştırılmasını istiyorum. Fakat bunu çalıştırırsanız, ikinci geçişte temizliğin asla yanmayacağını göreceksiniz.Bir IEnumerator'u sonuna kadar yinelemeden nasıl iptal edebilirim?
böyle bir IEnumerable terk tercih edilen yöntem nedir?
static void Main(string[] args)
{
// first pass
foreach (String color in readColors())
Console.WriteLine(color);
// second pass
IEnumerator<string> reader = readColors().GetEnumerator();
if (reader.MoveNext())
{
Console.WriteLine(reader.Current);
reader.Dispose();
}
}
static IEnumerable<string> readColors()
{
string[] colors = { "red", "green", "blue" };
for (int i = 0; i < colors.Length; i++)
yield return colors[i];
Console.WriteLine("Cleanup goes here");
}
şey eksik olabilir veya örnek aşırı basitleştirilmiş ... ama ne temizleme sen readColors içinde Numaralama sonunda çalıştırmak ened mı? GC'nin işleri iyi halletmesi gerektiği gibi görünüyor. –
Özel bir koleksiyona sahipseniz, aynı zamanda kimlik bilgilerini de uygulayabilirsiniz?!. – serhio