2012-02-14 26 views
0

我想使用的样本来自This SO article如何在C#IF语句中使用“return”这个例子?

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

我如何使用 “返回writeAllow & &!writeDeny” 在if语句?或者我甚至可以这样做。对不起,如果这是一个愚蠢的问题,但在我有限的经验,我没有看到这样的回报。

+1

你没见过的关键字'return'后跟体现在哪里? '返回1 + 2;'看起来更熟悉吗?这是同一件事。 – 2012-02-14 22:18:06

+0

或更好。 'return true && false;' – 2012-02-14 22:20:27

回答

3

这是你的意思是“在if语句中使用它”?

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

此代码调用与mypath功能,并根据返回的结果(这可以归结为writeAllow && !writeDeny),它可能会或可能不会计算为true并执行if语句。

+0

谢谢大家。我错过了(mypath)部分。 – JimDel 2012-02-14 22:43:45

2

在该方法结束时,评估布尔值并返回一行。但是你可以重写它像这样(不推荐,只是表示清晰度):

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

或者,如果你想它用简单的英语:

返回如果真write允许,而不是否认。

双号(&)是logical short-circuit含义(在这种情况下),如果所述第一术语的计算结果为假,则不会如果第二项不或没有关系,因此它不会被评估。

+0

如果我碰到这段代码,我会做的第一件事是重构'ValueToReturn'变量。我不认为它被“用简单的英语重写”。 – NotMe 2012-02-14 22:22:40

+1

我也会重构它。我试图展示return语句如何评估变量并返回结果。 (如果OP对这种工作方式感到困惑,这个问题并不完全清楚) – JYelton 2012-02-14 22:24:11

+0

非常真实。这个问题有点神秘 – NotMe 2012-02-14 22:26:31

2

writeAllow && !writeDeny退避至boolif陈述的唯一要求是圆括号内的任何内容都计算为bool

if (writeAllow && !writeDeny) 
{ 
    //do something 
} 
2

的& &运算符是一个布尔运算符,这意味着它返回true或false:因此,使用内部的if语句的表达是那样简单。这意味着你可以在if语句中完全使用这个表达式:

if (writeAllow && !writeDeny) 

将工作。

2

如果我明白了,你想要把这段代码放到你自己的函数中。那是对的吗?

首先,我建议你把它作为一个单独的函数。它可以更容易地辨别出该代码的意图。您可以在if语句使用它:

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

或者,如果你坚持要复制代码,内联:

// TODO: Content of HasWritePermissionOnDir method without the return statement... 
if (WriteAllow && !writeDeny) 
{ 
    // TODO 
}