有人可以告诉我为什么这个简单的 c# 代码不起作用,涉及从自身内部递归调用方法以获取根类别 ID
本文关键字:内部 递归 调用 获取 ID 方法 为什么 告诉我 简单 不起作用 代码 | 更新日期: 2023-09-27 18:20:56
表中的所有根类别的 PCATID 均为空。该方法实际上完成了这项工作,将 cat 设置为根目录类别,但令人惊讶的是一次无法返回它击中return cat;
做了一些奇怪的跳跃和出"如果"语句,再来GetRootCat(cat);
并且返回的不是根类别,而是第一个父类别猫的类别。
叫:
listModel.PCATID = GetRootCat(cat).CategoryID;
方法:
private Category GetRootCat(Category cat)
{
if (cat.PCATID != null)
{
cat = repository.Categories.FirstOrDefault(x => x.CategoryID == cat.PCATID);
GetRootCat(cat);
}
return cat;
}
替换
GetRootCat(cat);
跟
return GetRootCat(cat);
它不会"无法返回",它会返回给自身,因为它是一个递归调用。但是当它调用自身时,它会丢弃返回值,并落入 return cat
,这为您提供了您调用它的类别的父级。
这会更理智:
private Category GetRootCat(Category cat) {
if (cat.PCATID == null) { /* This is the root */
return cat;
} else {
Category parent = repository.Categories.FirstOrDefault(x => x.CategoryID == cat.PCATID);
return GetRootCat(parent);
}
}