У меня есть Enum, предположит:Карта Enum в [Flags] Enum
public enum ItemStatus {
Available, Unavailable
}
У меня есть метод, который возвращает список тех телевизоров, на основе фильтра. А фильтр представлен в Enum:
[Flags]
public enum ItemStatusFilter {
Available = 1, Unavailable = 2
}
Вопрос: что такое пятно способ проверить, если данный экземпляр ItemStatus спичек данный экземпляр ItemStatusFilter?
Мне не нравится идея присвоения значений элементам ItemStatus (1,2), поскольку это не требуется этим перечислением. Сейчас мой код выглядит следующим образом:
public static bool Matches(this TagStatusFilter statusFilter, TagStatus status) {
if (status == TagStatus.Available && ((statusFilter & TagStatusFilter.Available) != 0)) return true;
if (status == TagStatus.Unavailable && ((statusFilter & TagStatusFilter.Unavailable) != 0)) return true;
return false;
}
Что-то в этом роде?
[Flags]
public enum TagStatusFilter {
Available = 1 << TagStatus.Available,
Unavailable = 1 << TagStatus.Unavailable
}
Цель состоит в том, чтобы уменьшить количество кода и уменьшить сцепление между типами.
Ощущается ли это, что enum TagStatusFilter
здесь не используется?
Это может вернуть ложные срабатывания, если имя элемента один перечисления также подстрока другого члена. –
не в этом случае, поскольку первая буква перечисления капитализируется. Предостережение, очевидно, рекомендуется, и я говорю, что мне это не нравится .. но он определенно будет работать в этом случае :) – Sk93