2010-05-05 13 views
35

Ben kendi ArrayList sınıfını uygulayan ve benNeden .net dizileri neden IEnumerable ve IEnumerable <T> değil?

public System.Collections.Generic.IEnumerator<T> GetEnumerator() { 
    return _array.GetEnumerator(); 
} 

işe yaramadı fark edince sürpriz bırakıldı. Neden diziler IEnumerator .NET uygulamıyorsunuz?

Herhangi bir iş var mı?

Teşekkür

+4

Halihazırda bir düzine mevcut toplama dersi olduğunda kendi ArrayList sınıfınızı nasıl uygularsınız? – Aaronaught

+52

Neden olmasın? Bu türden yorumlardan bıktım. –

+4

Sizi rahatsız eden bu tür sorular sormuyoruz, ama ne yapmaya çalıştığınızı öğrenmek için. Bu size daha iyi bir cevap vermemize yardımcı olur. – Steven

cevap

49

Diziler IEnumerable<T> uygulamak yaparlar, ama CLI diziler için vardır özel bilginin bir parçası olarak yapılır. Birçok araç bu uygulamayı göstermeyecek. documentation'da ".NET Framework 2.0 ile başlayarak" notu başlayan notlarda paragrafa bakın (önceki .NET sürümleri için belgeler: "Önemli" blogu arayın).

Bir atması eklemek olabilir:

return ((IEnumerable<T>)_array).GetEnumerator(); 
+0

Sadece "sınıf" T [] 'bir _explicit arabirimi application_ tarafından IEnumerable ' uygulanmış gibi çalışır. Basitçe '_array.GetEnumerator()' diyorsanız, yanlış dönüş türüne sahip 'public' yöntemini alırsınız. –

+0

@RayL Güncelleştirme belgelerinin .NET 2.0 sürümüne bakın :-). – Richard

+0

Sadece bir kafa. Başvurulan https://msdn.microsoft.com/en-us/library/system.array.aspx#Remarks: "IList ", "ICollection " ve "IEnumerable " genel arabirimlerini uygular. – Wouter

-1

Sen IEnumerable arabirimini genişletir System.Linq ad, gelen jenerik yöntem IEnumerable<T> OfType<T>() kullanabilirsiniz. Bu, T türünden farklı olan ve IEnumerable<T> collection döndüren tüm öğeleri filtreler. (IEnumerable<T>)_array dönüşüm işlecini kullanırsanız, System.Array (ve diğer nongenerik türler) System.Object türünde öğeler depoladığından güvenli olmayabilir.

+0

Yalnızca Nesnelerin dizileri (yani Nesne [] arr ') öğeyi nesne olarak kaydeder. Bunlardan başka, dizi güvenlidir. Bu OfType ve Cast yöntemlerini gereksiz hale getirir. – jmoreno