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 returnkembali 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 returnsementara 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 returnfungsi rekursif, skala penggunaan memori eksplosif. Lihat stackoverflow.com/a/30300257/284795