Как правильно сравнивать ENUM на C#?
FileAttributes не является Enum в привычном смысле. Это битовая маска, то есть число в котором определенные биты имеют определенные значения. Пример откровенно говоря неправильный, так как в ожидаемые директории будет иметь ещё и атрибут Directory, как минимум. Если нужно найти все файлы имеющие один из атрибутов, то код должен выглядеть такif(dir.Attributes & (FileAttributes.Hidden | FileAttributes.Offline) != 0)
Здесь мы складываем биты двух атрибутов и если любой из них не будет равен 0, то условие сработает.
Тут надо шарить в битовом представлении чисел и логических операциях.
В данном случае 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 не описан третий бит.