Что такое | (труба) в С#?

Просто интересно, что в этом означает труба? ive никогда не видел этого раньше:

FileSystemAccessRule fullPermissions = new FileSystemAccessRule(
             "Network Service",
             FileSystemRights.FullControl | FileSystemRights.Modify,
             AccessControlType.Allow);

Приветствия

Ответ 2

Для перечисления, отмеченного атрибутом [Flags], вертикальная полоса означает "и", т.е. добавляет заданные значения вместе.

Изменить: это поразрядный или "(хотя и семантически" и "), например:

[Flags]
public enum Days
{
     Sunday    = 0x01,
     Monday    = 0x02,
     Tuesday   = 0x04,
     Wednesday = 0x08,
     Thursday  = 0x10,
     Friday    = 0x20,
     Saturday  =  0x40,
}

// equals = 2 + 4 + 8 + 16 + 32 = 62
Days weekdays = Days.Monday | Days.Tuesday | Days.Wednesday | Days.Thursday | Days.Friday;

Это побитовое ИЛИ, но семантически вы думаете об этом как AND!

Ответ 3

Это побитовое ИЛИ двух значений, предположительно оно создает FileAccessRule с установленными разрешениями FullAccess и Modify.

Ответ 4

Это двоичный оператор:

Двоичный | операторы предопределены для интегральные типы и bool. Для интегральные типы, | вычисляет поразрядное ИЛИ его операндов. Для операндов bool, | вычисляет логический ИЛИ его операнды; то есть результат ложный тогда и только тогда, когда оба операнда ложь.

Ответ 5

Я предполагаю, что вы имеете в виду это: FileSystemRights.FullControl | FileSystemRights.Modify

Этот FileSystemRights, представляет собой перечисление с FullControl и Modify, имеющее свои собственные числовые значения.

Итак, если FullControl = 1 и Modify = 2,

FileSystemRights.FullControl | FileSystemRights.Modify = 3.  
00000001 | 00000010 = 00000011.  

Каждый бит является "флагом" для этого метода. Вход проверяет, какой флаг установлен и что делать.

Итак, в этом примере позиция 1 (в этом случае цифра полностью справа) - это FullControl, а позиция 2 - Modify. Метод рассматривает каждую из позиций и изменяет ее поведение. Использование флагов - это способ передачи нескольких параметров поведения без необходимости создания параметра для каждой возможности (например, bool allowFullControl, bool allowModify) и т.д.

Побитовый оператор

Ответ 6

Это логическое или. FullControl и Modify представляют биты в маске. Например, 0001 и 0101. Если вы объедините их через трубу, вы получите 0101.