错误 并非所有代码路径都返回值

本文关键字:路径 返回值 代码 错误 | 更新日期: 2023-09-27 18:36:19

我有FormTemplateGroup

public class FormTemplateGroup : BaseEntity, IIerarhycal<FormTemplateGroup>
{
    public virtual string Name { get; set; }
    public virtual bool Active { get; set; }
    public virtual FormTemplateGroup Parent { get; set; }
    public virtual IList<FormTemplateGroup> Children { get; set; }
}

我有一些使用FormTemplateGroup类的方法

public FormTemplateGroup GetFormTemplateGroup(int id)
    {
        var formTemplateGroup =
            FormTemplateGroupRepository.Query().FirstOrDefault(ftg => ftg.Id == id);
        return formTemplateGroup;
    }
    public FormTemplate GetFormTemplate(int id)
    {
        var formTemplateGroup = GetFormTemplateGroup(id);
        var formTemplate =
                FormTemplateRepository.Query().FirstOrDefault(ft => ft.Group.Id == formTemplateGroup.Id);
        return formTemplate;
    }
    public bool checkForChild(IList<FormTemplateGroup> groups)
    {
        foreach (FormTemplateGroup g in groups)
        {
            if (GetFormTemplate(g.Id) != null) return false;
            if (g.Children.Count > 0)
            {
                return checkForChild(g.Children);
            }
            return true;
        }
    }

但是在方法checkForChild中我得到一个错误

错误 1 'Arg.BI.BL.Services.Dictionaries.FormTemplateGroupService.checkForChild(System.Collections.Generic.IList)': 并非所有代码路径都返回 value D:''svn''ARG_BI''Sources''trunk''Arg.BI''Arg.BI.BL''Services''Dictionaries''FormTemplateGroupService.cs 82 21 Arg.BI.BL

如何解决?

错误 并非所有代码路径都返回值

> 在checkForChild中,如果groups中没有项目,则不会执行foreach。而且您的方法将永远不会返回。

foreach 之后添加一个return false,如下所示:

public bool checkForChild(IList<FormTemplateGroup> groups)
{
    foreach (FormTemplateGroup g in groups)
    {
        if (GetFormTemplate(g.Id) != null) return false;
        if (g.Children.Count > 0)
        {
            return checkForChild(g.Children);
        }
        return true;
    }
    return false;
}

你需要在foreach之外返回。

如果 CheckForChild 方法中的 groups 参数为空,则没有 return 语句。

要么在foreach循环后返回布尔值,要么引发异常。

您的checkForChild方法应该在循环后返回一些内容。如果你不这样做,并且groups中没有FormTemplateGroup,编译器将不知道要返回什么。