Saya mulai berkecimpung di Windows 8 metro baru-baru ini, dan menemukan bahwa salah satu teman lamaku tampaknya telah hilang.
Saya cenderung menggunakan .ForEach()
metode yang lebih daripada yang saya gunakan tradisional foreach()
membangun, dan saya menyadari dengan cepat bahwa metode ini isn't yang tersedia. Misalnya, kode ini tidak akan mengkompilasi bawah metro app:
var list = new List<string>();
list.ForEach(System.Diagnostics.Debug.WriteLine);
I've mencari untuk melihat apakah saya bisa menemukan pembahasan ini, tapi bukan't mampu. Aku hanya menjadi tumpul, atau itu benar-benar pergi?
Daftar<T>.ForEach telah dihapus di Metro style apps. Sedangkan metode yang tampaknya sederhana ini memiliki sejumlah potensi masalah ketika daftar yang akan bermutasi dengan metode diteruskan ke ForEach. Malah dianjurkan bahwa anda hanya menggunakan sebuah loop foreach.
Wes Kuyu | .NET Framework Tim (BCL) | http://blogs.msdn.com/b/bclteam/
Sangat aneh, namun, itu membuat sebuah penampilan di dokumentasi, di mana tempat apakah itu menyatakan bahwa metode ini isn't didukung .NET untuk Windows Store apps (sebelumnya .NET untuk Metro style apps). Mungkin ini hanya pengawasan pada bagian dari tim dokumentasi.
Untuk memahami mengapa hal itu mungkin tidak akan disertakan lagi, baca posting ini oleh seseorang yang bekerja pada C# tim di Microsoft: http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
Pada dasarnya, it's filsafat. "LINQ" fitur yang sangat terinspirasi oleh paradigma pemrograman fungsional, dan ForEach ekstensi lalat di wajah yang... mendorong miskin gaya fungsional.
Alternatif adalah untuk menentukan sendiri tentu saja:
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach(T item in enumeration)
{
action(item);
yield return item;
}
}
Kredit: https://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet
(Catatan: bukan duplikat)