2012-02-14 9 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; 
} 

どのように私は、If文で "writeAllow & &返す!writeDeny" を使用することができますか?あるいは私はそれを行うこともできますか?申し訳ありませんが、これは愚かな質問ですが、私の限られた経験の中で私はそのようなリターンの外観を見ていない。

+1

あなたは表現が続くキーワード 'return'を見ていませんか? 'return 1 + 2;'これはもっとよく知られていますか?それは同じことです。 –

+0

以上である。 'true true && false;' –

答えて

3

「これをif文で使用する」ということですか?

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

このコードは、mypathで関数を呼び出し、(writeAllow && !writeDenyに沸く)返された結果に基づいて、それがまたはtrueに評価し、if文を実行しない場合があります。

+0

ありがとうございました。私は(mypath)の部分を欠いていた。 – JimDel

2

このメソッドの最後にブール値が評価され、1行に返されます。

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

をそれとも、平易な英語で考えてみれば:しかし、あなたは(ちょうど明確にするため示す、推奨されません)このようにそれを書き換えることができ

リターンをwriteが許可されている場合はtrue ない否定された

ダブルアンパサンド(&)は、第1項はfalseと評価された場合、第2項がないかどうかは問題ではないので、それは評価されないこと(この場合)logical short-circuit意味です。

+0

このコードを実行した場合、最初に行うリファクタリングは 'ValueToReturn'変数です。私はそれを「普通の英語で書かれている」とは考えていません。 – NotMe

+1

私もそれをリファクタリングします。私はreturnステートメントがどのように変数を評価して結果を返すかを示していました。 (OPがどのように働いているのか分かりませんでしたが、質問が何を求めているかは完全にはっきりしていません) – JYelton

+0

非常に真実です。質問は少しわかりにくいです – NotMe

2

writeAllow && !writeDenyboolに帰着する。 ifステートメントの唯一の要件は、かっこ内にあるものがboolと評価されることです。

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

& &オペレータが、それはtrueまたはfalseを返す意味、ブール演算子である:ように内部のif文の表現を使用しては同じくらい簡単です。つまり、if式でこの式を使用することができます。

if (writeAllow && !writeDeny) 

が動作します。

2

私が理解すれば、このコードを自分の関数の中に入れたいと思っています。あれは正しいですか?

まず、別の機能として残すことをお勧めします。そのコードが何を意味するのか分かりやすくします。あなたは、コードをインラインコピーを主張する場合

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

か:あなたはとif文でそれを使用することができます

// TODO: Content of HasWritePermissionOnDir method without the return statement... 
if (WriteAllow && !writeDeny) 
{ 
    // TODO 
} 
関連する問題