有人可以告诉我为什么这个简单的 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;
    }

有人可以告诉我为什么这个简单的 c# 代码不起作用,涉及从自身内部递归调用方法以获取根类别 ID

替换

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);
    }
}