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

时间:2013-10-22 10:31:20

标签: c# asp.net-mvc-4 generics

我有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)':   并非所有代码路径都返回   值D:\ svn \ ARG_BI \ Sources \ trunk \ Arg.BI \ Arg.BI.BL \ Services \ Dictionaries \ FormTemplateGroupService.cs 82 21 Arg.BI.BL

如何解决?

4 个答案:

答案 0 :(得分:4)

checkForChild中的

,如果groups中没有项目,foreach将无法执行。你的方法永远不会回来。

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

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

答案 1 :(得分:2)

你需要在foreach之外回来。

答案 2 :(得分:2)

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

foreach循环后返回一个布尔值,或抛出一个异常。

答案 3 :(得分:2)

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

相关问题