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
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.)
Hata gösterir "stil için metin al...
Ne zaman salt Okunur kullanın ve tek ö...
&Quot;git döner head" etkileri ge...
İsmi tarafından yönetilen AKSARAY fasu...
Bash: eğer herhangi bir komut başarısı...