-2

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

4 に答える 4

4

checkForChild項目がない場合groupsforeachは実行されません。そして、あなたのメソッドは決して戻りません。

return false次のように、の後にa を追加し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;
}
于 2013-10-22T10:35:01.917 に答える
2

foreach の外で return が必要です。

于 2013-10-22T10:34:26.977 に答える
2

メソッドのgroupsパラメーターCheckForChildが空の場合、return ステートメントはありません。

foreachループの後にブール値を返すか、例外をスローします。

于 2013-10-22T10:34:48.640 に答える
2

メソッドcheckForChildは、ループの後に何かを返す必要があります。そうしないと、 にFormTemplateGroupsがない場合groups、コンパイラは何を返せばよいかわかりません。

于 2013-10-22T10:34:53.853 に答える