SORU
19 Kasım 2012, PAZARTESİ


Herhangi bir IEnumerable<T> kullanıyorum yardımcı olduğu dikkate almak gerekir mi?

Son zamanlarda çeşitli Etmeniz uzatma yöntemleri (Where, Select, vb gibi) de olur IEnumerable<T> IDisposable dönüş olacak bana işaret oldu. Aşağıdaki True olarak değerlendirir

new int[2] {0,1}.Select(x => x*2) is IDisposable

Where bir ifadenin sonuçlarını atmanız gerekiyor mu?

Her ne zaman ben bir yöntem IEnumerable<T>, Ben dönmeden (potansiyel olarak) onunla işim bittiğinde imha aradığınız için sorumluluk kabul diyorsun?

CEVAP
19 Kasım 2012, PAZARTESİ


Hayır, bu konuda endişelenmenize gerek yok.

IDisposable Bir Uygulama dönerler aslında uygulama bir detay - C Microsoft uygulamasında yineleyici engeller çünkü# bir derleyici oluşturmak için oldutekIEnumerable<T> IEnumerator<T> hem uygulayan yazın. İkincisi de görüyorsunuz ediliyor IDisposable, genişletir.

Örnek kod, bu göstermek için:

using System;
using System.Collections.Generic;

public class Test 
{
    static void Main() 
    {
        IEnumerable<int> foo = Foo();
        Console.WriteLine(foo is IDisposable); // Prints True
    }

    static IEnumerable<int> Foo()
    {
        yield break;
    }
}

UnutmayınyapınIEnumerator<T> IDisposable uygulayan gerçeği dikkate alması gerekiyor. Açıkça yineleme yapmak her zaman, gerektiği gibi elden çıkarın. Eğer bir şey üzerinde yineleme ve her zaman olacak emin olmak istiyorsanız, örneğin,birdeğeri, bir şey gibi kullanabilirsiniz:

using (var enumerator = enumerable.GetEnumerator())
{
    if (!enumerator.MoveNext())
    {
        throw // some kind of exception;
    }
    var value = enumerator.Current;
    while (enumerator.MoveNext())
    {
        // Do something with value and enumerator.Current
    }
}

(foreach bir döngü bu, otomatik olarak, elbette yapacaktır.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008
  • spederson7

    spederson7

    17 Temmuz 2006