gpt4 book ai didi

c# - 堆栈溢出异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:04 25 4
gpt4 key购买 nike

我有一个 System.Windows.Forms.Treeview 控件,带有用于构建权限树的复选框,节点是从数据库记录动态构建的,以及从 Allow 后面的代码添加的自定义节点添加允许删除允许更新

问题是,当我尝试从树中检索检查节点时,我得到了一个 StackOverflowException

这是我的代码:

List<tbl_JobPermission> SaveCheckedPermissions(int _JobID, System.Windows.Forms.TreeNodeCollection theNodes)
{
using (WFMDBEntities _DBContext = new WFMDBEntities())
{
tbl_JobPermission _JopPermissionHelperVar;
if (theNodes.Count > 0)
{
foreach (System.Windows.Forms.TreeNode aNode in theNodes.OfType<System.Windows.Forms.TreeNode>().Where(x => x.Checked == true))
{
int _tempJobPermID = int.Parse(aNode.Parent.Name);
if (aNode.Name.Contains('_'))
{
_JopPermissionHelperVar =
new tbl_JobPermission()
{
TblPremition = _tempJobPermID,
Tbljob = _JobID
};
if (aNode.Name.ToLower().Contains("add"))
{
_JopPermissionHelperVar.AllowNew = true;
}
else if (aNode.Name.ToLower().Contains("update"))
{
_JopPermissionHelperVar.AllowUpdate = true;
}
else if (aNode.Name.ToLower().Contains("delete"))
{
_JopPermissionHelperVar.AllowDelete = true;
}

if (!_JobPermissions.Contains(_JopPermissionHelperVar))
{
_JobPermissions.Add(_JopPermissionHelperVar);
}
}
else
{
_JopPermissionHelperVar =
new tbl_JobPermission()
{
TblPremition = int.Parse(aNode.Name),
Tbljob = _JobID
};
if (!_JobPermissions.Contains(_JopPermissionHelperVar))
{
_JobPermissions.Add(_JopPermissionHelperVar);
}
}
if (aNode.Nodes.Count > 0)
{
_JobPermissions.AddRange(SaveCheckedPermissions(_JobID, aNode.Nodes));
}
}
}
}
return _JobPermissions;
}

最佳答案

这里有一个递归调用:

if (aNode.Nodes.Count > 0)
{
_JobPermissions.AddRange(SaveCheckedPermissions(_JobID, aNode.Nodes));
}

通过在调试器下运行,检查您是否在递归之前减少了节点数。

我认为如果在特定级别检查所有节点,它将无限递归。

[编辑]

可能只是节点层级太多了。在崩溃之前它达到了多少级递归?你能用 Debug.WriteLines 检测它吗?

关于c# - 堆栈溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com