Тут надо шарить в битовом представлении чисел и логических операциях.
В данном случае FileAttributes представляет собой набор описывающий каждый бит, как признак (атрибут у enum [Flags]).
Поэтому если мы хотим объединить признаки, например как вы (скрытый и оффлайн) то нужно использовать логическое сложение OR он же |.
А вот чтобы проверить, что в Attributes включены те биты, что нам нужны используют логическое умножение AND он же &. В результате останутся только биты, которые были в обоих числах. То есть по сути нам нужно сравнить результат с нашей проверкой.
var hideAndOffline = FileAttributes.Hidden | FileAttributes.Offline;
if ((dir.Attributes & hideAndOffline) == hideAndOffline)
Ну вот например у моей паки корзины атрибут в числовом выражении равен 0x16, оно же в бинарном b10110
Мы видим что активно три бита, первый, второй и четвертый, что соответствует Hidden(0x2) + System(0x4) + Directory(0x10) = 0x16. Забавно, что в структуре FileAttributes не описан третий бит.