IEnumerable<T>
WebForms 페이지에서 컨트롤을 찾는 데 사용 하는 방법이 있습니다.
이 방법은 재귀 적이며 yield return
재귀 호출의 값을 returnig 할 때 원하는 유형을 반환하는 데 문제 가 있습니다.
내 코드는 다음과 같습니다.
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>();
}
}
}
현재 "표현 유형을 변환 할 수 없습니다"오류가 발생합니다. 그러나이 메소드가 type을 리턴 IEnumerable<Object>
하면 코드가 빌드되지만 출력에 잘못된 유형이 리턴됩니다.
yield return
재귀도 사용 하는 방법이 있습니까?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, 특히 양보하는 경우 :)
yield
. 아래를 참조하십시오 :) 그리고 그것은 하나의 라이너이기도합니다 :)
yield return
재귀 함수에서는 메모리 사용량이 폭발적으로 증가 하지 않도록주의해야합니다 . 참조 stackoverflow.com/a/30300257/284795을