foreach代码如何改造成递归

accpchenjun 2010-12-02 10:00:43
下面代码如何改造成递归的方式


List<RibbonPageGroup> rpgList = null;
List<BarButtonItem> bbbiList = null;
List<RibbonPage> rpList = new List<RibbonPage>();
foreach (XmlNode xnRibbonPage in nodeList)
{
rpgList = new List<RibbonPageGroup>();
foreach (XmlNode xnRibbonPageGroup in xnRibbonPage.ChildNodes)
{
bbbiList = new List<BarButtonItem>();
foreach (XmlNode xnBarButtonItem in xnRibbonPageGroup.ChildNodes)
{
BarButtonItem bbbii = new BarButtonItem();
bbbii.Name = xnBarButtonItem.Attributes["Name"].Value;
bbbii.Caption = xnBarButtonItem.Attributes["Caption"].Value;
bbbii.Description = xnBarButtonItem.Attributes["NameSpace"].Value;
bbbii.ItemClick += new ItemClickEventHandler(BarButtonItem_ItemClick);
bbbiList.Add(bbbii);
}
RibbonPageGroup rpg = new RibbonPageGroup();
rpg.Text = xnRibbonPageGroup.Attributes["Text"].Value;
rpg.ShowCaptionButton = false;
rpg.ItemLinks.AddRange(bbbiList.ToArray());
rpgList.Add(rpg);
}
if (xnRibbonPage.Attributes["Text"].Value != "系统管理")
{
RibbonPage rp = new RibbonPage();
rp.Text = xnRibbonPage.Attributes["Text"].Value;
rp.MergedGroups.AddRange(rpgList.ToArray());
rpList.Add(rp);
}
else
{
rp1.MergedGroups.Add(rpgList[rpgList.Count - 1]);
rpList.Add(rp1);
}
}
if (rp1.MergedGroups.Count == 1)
rpList.Add(rp1);
ribbon.Pages.AddRange(rpList.ToArray());
ribbon.ItemsVertAlign = DevExpress.Utils.VertAlignment.Top;
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyerwing 2010-12-02
  • 打赏
  • 举报
回复
没能过,这个.
accpchenjun 2010-12-02
  • 打赏
  • 举报
回复
下面是我的完整代码
如何改造成XMLTextReader读数据+递归

XmlDocument xd = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = null;
XmlNodeList nodeList;
if (SessionManager.Session["Psn_IsAdmin"].ToString() != "True")
{
string userconfig = string.Format("{0}PermissionsMenuList.config", SessionManager.Session["Psn_ID"]);
reader = XmlReader.Create(userconfig, settings);
xd.Load(reader);
nodeList = xd.SelectSingleNode("Ribbon").ChildNodes;
}
else
{
reader = XmlReader.Create("AdminMenuList.config", settings);
xd.Load(reader);
nodeList = xd.SelectSingleNode("Ribbon").ChildNodes;
}
List<RibbonPageGroup> rpgList = null;
List<BarButtonItem> bbbiList = null;
List<RibbonPage> rpList = new List<RibbonPage>();
foreach (XmlNode xnRibbonPage in nodeList)
{
rpgList = new List<RibbonPageGroup>();
foreach (XmlNode xnRibbonPageGroup in xnRibbonPage.ChildNodes)
{
bbbiList = new List<BarButtonItem>();
foreach (XmlNode xnBarButtonItem in xnRibbonPageGroup.ChildNodes)
{
BarButtonItem bbbii = new BarButtonItem();
bbbii.Name = xnBarButtonItem.Attributes["Name"].Value;
bbbii.Caption = xnBarButtonItem.Attributes["Caption"].Value;
bbbii.Description = xnBarButtonItem.Attributes["NameSpace"].Value;
bbbii.ItemClick += new ItemClickEventHandler(BarButtonItem_ItemClick);
bbbiList.Add(bbbii);
}
RibbonPageGroup rpg = new RibbonPageGroup();
rpg.Text = xnRibbonPageGroup.Attributes["Text"].Value;
rpg.ShowCaptionButton = false;
rpg.ItemLinks.AddRange(bbbiList.ToArray());
rpgList.Add(rpg);
}
if (xnRibbonPage.Attributes["Text"].Value != "系统管理")
{
RibbonPage rp = new RibbonPage();
rp.Text = xnRibbonPage.Attributes["Text"].Value;
rp.MergedGroups.AddRange(rpgList.ToArray());
rpList.Add(rp);
}
else
{
rp1.MergedGroups.Add(rpgList[rpgList.Count - 1]);
rpList.Add(rp1);
}
}
if (rp1.MergedGroups.Count == 1)
rpList.Add(rp1);
ribbon.Pages.AddRange(rpList.ToArray());
ribbon.ItemsVertAlign = DevExpress.Utils.VertAlignment.Top;
accpchenjun 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pittroll 的回复:]

为甚要改成递归
[/Quote]
我想测试一下 多层嵌套好递归那个效率高
luozhongxian001 2010-12-02
  • 打赏
  • 举报
回复
这是我以前做的一个案例你可以参考下:
public void AddTree(int ParentID, TreeNode pNode, TreeView treeView, DataTable dt)
{
DataView dvTree = new DataView(dt);
dvTree.RowFilter = "[ForceID]=" + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["ConText"].ToString();
treeView.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node, treeView, dt); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["ForceName"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node, treeView, dt); //再次递归
}
}
}
luozhongxian001 2010-12-02
  • 打赏
  • 举报
回复
foreach (XmlNode xnBarButtonItem in xnRibbonPageGroup.ChildNodes)
{
BarButtonItem bbbii = new BarButtonItem();
bbbii.Name = xnBarButtonItem.Attributes["Name"].Value;
bbbii.Caption = xnBarButtonItem.Attributes["Caption"].Value;
bbbii.Description = xnBarButtonItem.Attributes["NameSpace"].Value;
bbbii.ItemClick += new ItemClickEventHandler(BarButtonItem_ItemClick);
bbbiList.Add(bbbii);
}
该成回调自身函数即可!
PitTroll 2010-12-02
  • 打赏
  • 举报
回复
为甚要改成递归
colorall 2010-12-02
  • 打赏
  • 举报
回复
递归简单易懂,但很耗资源。特别递归层次得多的时候,一般PC是承受不了了。
PitTroll 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 accpchenjun 的回复:]
引用 1 楼 pittroll 的回复:

为甚要改成递归

我想测试一下 多层嵌套好递归那个效率高
[/Quote]
递归容易导致内存泄露,以前我测试递归1W层的时候,内存就受不了啦。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧