[英]Is it ok to use bitwise operator in place of a logical operator like OR
這可能是愚蠢的。但是我有一個簡單的疑問,假設我在函數中進行了以下檢查
bool Validate(string a , string b)
{
if(a == null || b == null)
{
throw new NullReferenceException();
}
else
{
}
}
可以使用按位或進行驗證,如下所示
if(a == null | b == null)
在布爾表達式(而不是整數等)中,主要區別是:短路。 ||
短路。 |
才不是。 在大多數情況下,您想短路,所以||
更為常見。 對於您而言,這無關緊要,所以||
應該被用作更期望的選擇。
重要的時刻是:
if(politics.IsCeasefire() | army.LaunchTheRockets()) {
// ...
}
vs:
if(politics.IsCeasefire() || army.LaunchTheRockets()) {
// ...
}
第一個總是做這兩個 (假設沒有拋出異常); 如果要求停火,第二個也不會發射火箭。
在這種情況下(與bool
參數)的|
運算符不是按位運算符。 它只是邏輯or
( ||
)的非短路版本。
&
vs. &&
-這只是邏輯and
的非短路版本。
可以從副作用中看出差異,例如
bool Check()
{
Console.WriteLine("Evaluated!");
return true;
}
// Short-circuits, only evaluates the left argument.
if (Check() || Check()) { ... }
// vs.
// No short circuit, evaluates both.
if (Check() | Check()) { ... }
這應該行得通,因為當在評估為bool
事物上使用時,“按位”運算符將執行相同的邏輯運算。 但是,您可能會發現它效率較低。 C#中的邏輯運算符將短路,這意味着如果可以從第一個表達式中得出答案,則它們將跳過對第二個表達式的求值。 因此,在您的示例中,如果a == null
變為true,則||
將立即返回true
,而|
會繼續檢查b == null
。
如前所述,該代碼確實是“確定”的。
使用單管道“ |” 將在返回結果之前對所有表達式求值。 '||' 可以提高效率,因為表達式一經計算為true就立即終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.