Поделиться через


Оператор || (Справочник по C#)

Условный- оператор OR (||) выполняет a логически- ИЛИ для своих операндов bool. Если первый операнд имеет значение true операнд, то второй не вычисляется. Если первый операнд имеет значение false, то второй оператор определяет, имеет ли выражение в целом к true или false.

Заметки

Операция

x || y

соответствует операции

x | y

за исключением того, что если xtrue, то y не вычисляется, поскольку ИЛИ операция true независимо от значения y. Это понятие как вычисление "короткого замыкания".

Условный- ИЛИ оператор не может быть перегружатьо, но считается, что перегруженные версии стандартных логических операторов и операторов true и false, с некоторыми ограничениями, также перегрузками условной логических операторов.

Пример

В следующих примерах || оценивает выражение, которое использует только первый операнд. Выражение, использующее |вычисляет оба операнда. Во втором примере исключение во время выполнения возникает, если выполняются оба операнда.

class ConditionalOr
{
    // Method1 returns true. 
    static bool Method1()
    {
        Console.WriteLine("Method1 called.");
        return true;
    }

    // Method2 returns false. 
    static bool Method2()
    {
        Console.WriteLine("Method2 called.");
        return false;
    }


    static bool Divisible(int number, int divisor)
    {
        // If the OR expression uses ||, the division is not attempted 
        // when the divisor equals 0. 
        return !(divisor == 0 || number % divisor != 0);

        // If the OR expression uses |, the division is attempted when 
        // the divisor equals 0, and causes a divide-by-zero exception. 
        // Replace the return statement with the following line to 
        // see the exception. 
        //return !(divisor == 0 | number % divisor != 0);
    }

    static void Main()
    {
        // Example #1 uses Method1 and Method2 to demonstrate  
        // short-circuit evaluation.

        Console.WriteLine("Regular OR:");
        // The | operator evaluates both operands, even though after  
        // Method1 returns true, you know that the OR expression is 
        // true.
        Console.WriteLine("Result is {0}.\n", Method1() | Method2());

        Console.WriteLine("Short-circuit OR:");
        // Method2 is not called, because Method1 returns true.
        Console.WriteLine("Result is {0}.\n", Method1() || Method2());


        // In Example #2, method Divisible returns True if the 
        // first argument is evenly divisible by the second, and False 
        // otherwise. Using the | operator instead of the || operator 
        // causes a divide-by-zero exception. 

        // The following line displays True, because 42 is evenly  
        // divisible by 7.
        Console.WriteLine("Divisible returns {0}.", Divisible(42, 7));

        // The following line displays False, because 42 is not evenly 
        // divisible by 5.
        Console.WriteLine("Divisible returns {0}.", Divisible(42, 5));

        // The following line displays False when method Divisible  
        // uses ||, because you cannot divide by 0. 
        // If method Divisible uses | instead of ||, this line 
        // causes an exception.
        Console.WriteLine("Divisible returns {0}.", Divisible(42, 0));
    }
}
/*
Output:
Regular OR:
Method1 called.
Method2 called.
Result is True.

Short-circuit OR:
Method1 called.
Result is True.

Divisible returns True.
Divisible returns False.
Divisible returns False.
*/

См. также

Ссылки

Операторы C#

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#