Как мне использовать эти примеры "return" в выражении C # IF? - PullRequest
0 голосов
/ 15 февраля 2012

Образец, который я хочу использовать, взят из Эта статья SO .

public static bool HasWritePermissionOnDir(string path)
{
    var writeAllow = false;
    var writeDeny = false;
    var accessControlList = Directory.GetAccessControl(path);
    if (accessControlList == null)
        return false;
    var accessRules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
    if (accessRules == null)
        return false;

    foreach (FileSystemAccessRule rule in accessRules)
    {
        if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) continue;

        if (rule.AccessControlType == AccessControlType.Allow)
            writeAllow = true;
        else if (rule.AccessControlType == AccessControlType.Deny)
            writeDeny = true;
    }

    return writeAllow && !writeDeny;
}

Как я могу использовать return returnAllow &&! WriteDeny в операторе If? Или я могу даже сделать это. Извините, если это глупый вопрос, но в моем ограниченном опыте я не вижу, как выглядит ответ.

Ответы [ 5 ]

3 голосов
/ 15 февраля 2012

Это то, что вы подразумеваете под "использованием его в операторе if" ??

if (HasWritePermissionOnDir(mypath))
{
    // Then write a new file to the directory
}

Этот код вызывает функцию с mypath и, основываясь на возвращенном результате (сводящемся к writeAllow && !writeDeny), может оценить или не оценить true и выполните оператор if.

2 голосов
/ 15 февраля 2012

Если я понимаю, вы хотите взять этот код и поместить его в одну из своих собственных функций. Это правильно?

Во-первых, я предлагаю вам оставить это как отдельную функцию. Это облегчает распознавать, когда этот кусок кода предназначен для выполнения. Вы можете использовать его в выражении if с:

if (HasWritePermissionOnDir("C:\\My\\Path"))
{
    // TODO
}

Или, если вы настаиваете на копировании встроенного кода:

// TODO: Content of HasWritePermissionOnDir method without the return statement...
if (WriteAllow && !writeDeny)
{
    // TODO
}
2 голосов
/ 15 февраля 2012

writeAllow && !writeDeny eavluates до bool.Единственное требование для оператора if состоит в том, что все, что находится внутри скобок, оценивается как bool.Поэтому использовать выражение внутри оператора if так же просто, как:

if (writeAllow && !writeDeny)
{
    //do something
}
2 голосов
/ 15 февраля 2012

Оператор && является логическим оператором, то есть возвращает либо true, либо false. Это означает, что вы можете использовать это выражение в операторе if именно таким, каким оно есть:

if (writeAllow && !writeDeny)

будет работать.

2 голосов
/ 15 февраля 2012

В конце метода логическое значение вычисляется и возвращается в одной строке. Но вы можете переписать его так (не рекомендуется, просто для наглядности):

bool ValueToReturn = WriteAllow && !writeDeny;
return ValueToReturn;

Или, если вы думаете об этом простым английским языком:

Вернуть true, если write разрешено , а не отклонено.

Двойной амперсанд (&) - это логическое короткое замыкание , означающее (в данном случае), что если первый член оценивается как ложный, то не имеет значения, будет ли второй член или нет поэтому оно не будет оцениваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...