Saya memiliki IEnumerable<T>
metode yang saya gunakan untuk menemukan kontrol di halaman WebForms.
Metode ini rekursif dan saya mengalami beberapa masalah mengembalikan tipe yang saya inginkan ketika yield return
kembali nilai nilai panggilan rekursif.
Kode saya terlihat sebagai berikut:
public static IEnumerable<Control>
GetDeepControlsByType<T>(this Control control)
{
foreach(Control c in control.Controls)
{
if (c is T)
{
yield return c;
}
if(c.Controls.Count > 0)
{
yield return c.GetDeepControlsByType<T>();
}
}
}
Ini saat ini melontarkan kesalahan "Tidak dapat mengonversi tipe ekspresi". Namun jika metode ini mengembalikan tipe IEnumerable<Object>
, kode dibuat, tetapi tipe yang salah dikembalikan dalam output.
Apakah ada cara menggunakan yield return
sementara juga menggunakan rekursi?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, terutama jika Anda menghasilkan juga :)
yield
. Silakan lihat di bawah ini :) Dan itu juga satu-liner :)
yield return
fungsi rekursif, skala penggunaan memori eksplosif. Lihat stackoverflow.com/a/30300257/284795