C#使用递归从列表创建HTML无序列表
是否可以使用递归输出以下HTML无序列表C#使用递归从列表创建HTML无序列表,c#,html,recursion,html-lists,C#,Html,Recursion,Html Lists,是否可以使用递归输出以下HTML无序列表 <ul> <li>1 <ul> <li>5 <ul> <li>8</li> <li>9</li> </ul> </l
<ul>
<li>1
<ul>
<li>5
<ul>
<li>8</li>
<li>9</li>
</ul>
</li>
<li>6</li>
</ul>
</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>7</li>
</ul>
这是我到目前为止所做的,当然不完全有效
foreach (var page in pages)
{
Console.WriteLine("<ul><li>{0}", page.pageId);
WriteMenu(pages, page.pageId, page.parentPageId);
}
public static void WriteMenu(List<Page> pages, int pageId, int parentPageId)
{
foreach (var page in pages)
{
if (page.parentPageId == pageId)
{
Console.WriteLine("<ul><li>{0}", page.pageId);
WriteMenu(pages, page.pageId, page.parentPageId);
}
}
}
foreach(页面中的变量页面)
{
Console.WriteLine(“- {0}”,page.pageId);
WriteMenu(页面,page.pageId,page.parentPageId);
}
公共静态void WriteMenu(列表页、int-pageId、int-parentPageId)
{
foreach(页面中的变量页面)
{
如果(page.parentPageId==pageId)
{
Console.WriteLine(“
- {0}”,page.pageId);
WriteMenu(页面,page.pageId,page.parentPageId);
}
}
}
那么:
public static bool WriteMenu(List<Page> pages, int parentId, int indent)
{
string padding = new string(' ', indent * 8);
bool writtenAny = false;
foreach (var page in pages.Where(p => p.ParentPageId == parentId))
{
if (!writtenAny)
{
Console.WriteLine();
Console.WriteLine(padding + "<ul>");
writtenAny = true;
}
Console.Write(padding + " <li>{0}", page.PageId);
if (WriteMenu(pages, page.PageId, indent + 1))
{
Console.WriteLine(padding + " </li>");
}
else
{
Console.WriteLine("</li>");
}
}
if (writtenAny)
{
Console.WriteLine(padding + "</ul>");
}
return writtenAny;
}
...
WriteMenu(pages, 0, 0);
publicstaticboolwritemenu(列表页、int-parentId、int-indent)
{
字符串填充=新字符串(“”,缩进*8);
bool writenany=false;
foreach(页面中的var页面,其中(p=>p.ParentPageId==parentId))
{
if(!writenany)
{
Console.WriteLine();
Console.WriteLine(填充+“”);
writenany=true;
}
Write(padding+“- {0}”,page.PageId);
if(WriteMenu(pages,page.PageId,缩进+1))
{
Console.WriteLine(填充+“
”);
}
其他的
{
Console.WriteLine(“”);
}
}
如果(写入)
{
Console.WriteLine(填充+“
”);
}
回报率;
}
...
WriteMenu(第0页,第0页);
那么:
public static bool WriteMenu(List<Page> pages, int parentId, int indent)
{
string padding = new string(' ', indent * 8);
bool writtenAny = false;
foreach (var page in pages.Where(p => p.ParentPageId == parentId))
{
if (!writtenAny)
{
Console.WriteLine();
Console.WriteLine(padding + "<ul>");
writtenAny = true;
}
Console.Write(padding + " <li>{0}", page.PageId);
if (WriteMenu(pages, page.PageId, indent + 1))
{
Console.WriteLine(padding + " </li>");
}
else
{
Console.WriteLine("</li>");
}
}
if (writtenAny)
{
Console.WriteLine(padding + "</ul>");
}
return writtenAny;
}
...
WriteMenu(pages, 0, 0);
publicstaticboolwritemenu(列表页、int-parentId、int-indent)
{
字符串填充=新字符串(“”,缩进*8);
bool writenany=false;
foreach(页面中的var页面,其中(p=>p.ParentPageId==parentId))
{
if(!writenany)
{
Console.WriteLine();
Console.WriteLine(填充+“”);
writenany=true;
}
Write(padding+“- {0}”,page.PageId);
if(WriteMenu(pages,page.PageId,缩进+1))
{
Console.WriteLine(填充+“
”);
}
其他的
{
Console.WriteLine(“”);
}
}
如果(写入)
{
Console.WriteLine(填充+“
”);
}
回报率;
}
...
WriteMenu(第0页,第0页);
抱歉,我第一次尝试时错过了递归位,这应该会得到您想要的结果:
Console.WriteLine("<ul>");
foreach (var page in pages)
{
if (page.parentPageId == 0)
{
WriteMenu(pages, page);
}
}
Console.WriteLine("</ul>");
private static void WriteMenu(List<Page> pages, Page page)
{
Console.WriteLine("<li>" + page.pageId);
var subpages = pages.Where(p => p.parentPageId == page.pageId);
if (subpages.Count() > 0)
{
Console.WriteLine("<ul>");
foreach (Page p in subpages)
{
if (pages.Count(x => x.parentPageId == p.pageId) > 0)
WriteMenu(pages, p);
else
Console.WriteLine(string.Format("<li>{0}</li>", p.pageId));
}
Console.WriteLine("</ul>");
}
Console.WriteLine("</li>");
}
Console.WriteLine();
foreach(页面中的变量页面)
{
如果(page.parentPageId==0)
{
WriteMenu(第页,第页);
}
}
Console.WriteLine(“
”);
专用静态无效写入单元(列表页,第页)
{
Console.WriteLine(“”+page.pageId);
var子页面=pages.Where(p=>p.parentPageId==page.pageId);
如果(子页面.Count()>0)
{
控制台写入线();
foreach(第p页,分页)
{
if(pages.Count(x=>x.parentPageId==p.pageId)>0)
书面材料(第页,第页);
其他的
Console.WriteLine(string.Format(“- {0}
”,p.pageId));
}
Console.WriteLine(“
”);
}
Console.WriteLine(“ ”);
}
抱歉,我第一次尝试时错过了递归位,这应该会得到您想要的结果:
Console.WriteLine("<ul>");
foreach (var page in pages)
{
if (page.parentPageId == 0)
{
WriteMenu(pages, page);
}
}
Console.WriteLine("</ul>");
private static void WriteMenu(List<Page> pages, Page page)
{
Console.WriteLine("<li>" + page.pageId);
var subpages = pages.Where(p => p.parentPageId == page.pageId);
if (subpages.Count() > 0)
{
Console.WriteLine("<ul>");
foreach (Page p in subpages)
{
if (pages.Count(x => x.parentPageId == p.pageId) > 0)
WriteMenu(pages, p);
else
Console.WriteLine(string.Format("<li>{0}</li>", p.pageId));
}
Console.WriteLine("</ul>");
}
Console.WriteLine("</li>");
}
Console.WriteLine();
foreach(页面中的变量页面)
{
如果(page.parentPageId==0)
{
WriteMenu(第页,第页);
}
}
Console.WriteLine(“
”);
专用静态无效写入单元(列表页,第页)
{
Console.WriteLine(“”+page.pageId);
var子页面=pages.Where(p=>p.parentPageId==page.pageId);
如果(子页面.Count()>0)
{
控制台写入线();
foreach(第p页,分页)
{
if(pages.Count(x=>x.parentPageId==p.pageId)>0)
书面材料(第页,第页);
其他的
Console.WriteLine(string.Format(“- {0}
”,p.pageId));
}
Console.WriteLine(“
”);
}
Console.WriteLine(“ ”);
}
就快到了。。。2,3,4,7部分与我的示例不同。@Nicholas:好的,经过编辑-我相信它现在看起来与您的示例完全一样-只是您的示例出于某种原因遗漏了第6项;)太好了,谢谢,有一次六角体恐惧症。。。很抱歉快到了。。。2,3,4,7部分与我的示例不同。@Nicholas:好的,经过编辑-我相信它现在看起来与您的示例完全一样-只是您的示例出于某种原因遗漏了第6项;)太好了,谢谢,有一次六角体恐惧症。。。很抱歉