ツリートラバーサルをしなければならなかったので、しばらく時間が経ちました。いくつかの入力が必要です。サンプル ツリーは次のとおりです。
ツリーは私の ASP.NET ページです。このページは、2 つのマスター ページとコンテンツ ページで構成されています。私がやりたいことは、2 番目のマスター ページのプライマリ コンテンツであるコントロールを見つけて、すべてのコントロールをリストなどのフラットなデータ構造に配置することです。
オレンジ色のノードが 2 番目のマスター ページのプライマリ ContentPlaceHolder であることを考えると、それらすべてをリストの青い楕円に格納したいと思います。これを使用して、コレクション内のコントロールのすべての子、孫などを返すコードを既に作成しています。
private IEnumerable<Control> GetChildControls(Control parentControl)
{
foreach (Control control in parentControl.Controls)
{
yield return control;
foreach(Control grandchild in GetChildControls(control))
{
yield return grandchild;
}
}
}
しかし、私はこのツリーをノードにフィルタリングする方法に少し固執しており、それは子です。それが役立つ場合、オレンジ色のノードは次のようになります。
<asp:Content ID="SystemMasterMainContentPlaceHolder" runat="server" ContentPlaceHolderID="MainContentPlaceholder">