пятница, 11 марта 2011 г.

Побитовые операторы | и & с аргументами типа bool в C#

Узнал сегодня следующую фишку: в C# операторы | и & можно использовать для аргументов bool. При этом они ведут себя не как побитовые операторы, а как обычные логические, но с одним отличием: всегда будут вычисляться оба аргумента. Это может быть удобно, когда второй аргумент является функцией (или свойством), возвращающей bool и делающей помимо этого ещё что-то полезное, и необходимо, чтобы она вызывалась всегда, даже если после вычисления первого аргумента значение логической операции И, либо ИЛИ уже ясно. При использовании обычных && и || второй аргумен вычисляется не всегда, например это не будет сделано в следующих случаях:

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
*/

Комментариев нет:

Отправить комментарий