并非所有代码路径都返回一个值

时间:2016-09-14 15:28:29

标签: c#

我有一个检查文件夹写入权限的方法。但它给我的错误说不是所有的代码路径都返回一个值?

public bool AccessPackerPlanTemplate(string folderPath)
{          
    try
    {
        string path = @"\\Sample";
        string NtAccountName = @"Sample";

        DirectoryInfo di = new DirectoryInfo(path);
        DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All);
        AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));

        //Go through the rules returned from the DirectorySecurity
        foreach (AuthorizationRule rule in rules)
        {
            //If we find one that matches the identity we are looking for
            if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase))
            {
                //Cast to a FileSystemAccessRule to check for access rights
                if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0)
                {
                    //Show the link
                }
            }
        }
    }
    catch (UnauthorizedAccessException)
    {
        return false;
    }
}

我在这种方法中缺少什么?

3 个答案:

答案 0 :(得分:4)

如果未抛出错误,则不返回布尔值。

在try / catch之后,你需要一个返回true / false。

不抛出错误是编译器需要返回类型的可能“代码路径”。

答案 1 :(得分:2)

捕获异常时,您只返回一个值。这就是你的编译器告诉你的原因。

答案 2 :(得分:1)

我会为你的方法推荐这个,因为你没有在所有方面返回一个布尔值:

public bool AccessPackerPlanTemplate(string folderPath)
{    
    bool result = false;      
    try
    {
         string path = @"\\Sample";
         string NtAccountName = @"Sample";
         //... Your code
         if(/*Your Condition*/)
         {
             result = true;
         }
    }
    catch (UnauthorizedAccessException)
    {
       result = false;
    }
    return result;
}