Узнал сегодня следующую фишку: в C# операторы | и & можно использовать для аргументов bool. При этом они ведут себя не как побитовые операторы, а как обычные логические, но с одним отличием: всегда будут вычисляться оба аргумента. Это может быть удобно, когда второй аргумент является функцией (или свойством), возвращающей bool и делающей помимо этого ещё что-то полезное, и необходимо, чтобы она вызывалась всегда, даже если после вычисления первого аргумента значение логической операции И, либо ИЛИ уже ясно. При использовании обычных && и || второй аргумен вычисляется не всегда, например это не будет сделано в следующих случаях:
true || someFunc()
false && someFunc()
Под катом тестовый примерчик.
true || someFunc()
false && someFunc()
Под катом тестовый примерчик.
using System;
public static class Example
{
private static bool True()
{
Console.WriteLine("Это true");
return true;
}
private static bool False()
{
Console.WriteLine("Это false");
return false;
}
public static void Main()
{
Console.WriteLine("False() && True() == "
+ (False() && True()).ToString());
Console.WriteLine();
Console.WriteLine("False() & True() == "
+ (False() & True()).ToString());
Console.WriteLine();
Console.WriteLine("True() || False() == "
+ (True() || False()).ToString());
Console.WriteLine();
Console.WriteLine("True() | False() == "
+ (True() | False()).ToString());
Console.WriteLine();
}
}
// Результат:
/*
Это false
False() && True() == False
Это false
Это true
False() & True() == False
Это true
True() || False() == True
Это true
Это false
True() | False() == True
*/
Комментариев нет:
Отправить комментарий