Tôi có một IEnumerable<T>
phương pháp mà tôi đang sử dụng để tìm các điều khiển trong trang WebForms.
Phương thức này là đệ quy và tôi gặp một số vấn đề khi trả về kiểu tôi muốn khi yield return
trả về giá trị của cuộc gọi đệ quy.
Mã của tôi trông như sau:
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>();
}
}
}
Điều này hiện gây ra lỗi "Không thể chuyển đổi loại biểu thức". Tuy nhiên, nếu phương thức này trả về kiểu IEnumerable<Object>
, mã sẽ xây dựng, nhưng loại sai được trả về trong đầu ra.
Có cách nào để sử dụng yield return
trong khi cũng sử dụng đệ quy không?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, đặc biệt nếu bạn cũng cho năng suất :)
yield
. Vui lòng xem bên dưới :) Và đó cũng là một lớp lót :)
yield return
trong các chức năng đệ quy, bộ nhớ sử dụng quy mô bùng nổ. Xem stackoverflow.com/a/30300257/284795