데이터베이스에 일부 항목이 있습니다. 각각의 브라우저에는 Browsable, IsInMenu 등과 같은 많은 태그가있을 수 있습니다. 내 친구가 Flags 특성을 사용하여 enum을 사용하여 확장 가능한 솔루션을 만들 것을 제안했습니다.Flags 특성을 사용하는 방법은 무엇입니까?
public List<Item> GetItems(ItemTags tags)
{
/*
Code to get data from DB, something like,
return repository.GetList(tags);
*/
}
: 내가 좋아하는 것
이제
[Flags]
public enum ItemTags { Browsable = 2, IsInMenu = 4}
이 방법 의미 일부 항목의 목록을 얻을 수있을 것 : 그래서, 그때 내가이 열거를 생성, 정수 값을 취 DB의 필드를 생성
및 UI에서 , 내가 전화하고 싶습니다 :
List<Item> items = GetItems(ItemTags.Browsable | ItemTags.IsInMneu);
하지만 원하는 결과를 얻을 수 없습니다. 나는 바른 길을 가고 있는가? 원하는 결과에 의해 다음을 의미합니다. 데이터베이스에 저장된 값은 이제 0, 2, 4, 6 값 중 하나 일 수 있습니다. 0은 항목이 Menu에없고 Browsable이 아님을 의미합니다. 2 해당 항목이 브라우징 가능하지만 메뉴에는 없음을 의미합니다. 4는 항목이 메뉴에 있지만 Browsable이 아님을 나타냅니다. 6은 항목이 Browsable 및 IsInMenu임을 의미합니다. 이제 GetItems
함수를 호출하면 탐색 가능한 메뉴, 메뉴 또는 탐색 가능한 메뉴와 메뉴 모두를 가져올 수 없습니다.
이 솔루션은 문제가 없습니다. 하지만 내 태그가 확장되면 어떻게 될까요? 내 말은,이 경우 모든 조합을 써야한다는 것입니다. 정말 어렵습니다. 내가 말했듯이'GetAllItems (ItemTags.All) '이 아닌'GetAllItems (ItemTags.IsInMenu | ItemTags.Browsable)'을 말할 수 있기를 원합니다. 내가 맞습니까? –
나는 Flagg 속성이 ItemTags.IsInMenu와 다른 것을 나타내는 값 6을 가진 다른 enumvalue를 허용하지 않기 때문에 ItemTags.All을 할 것이라고 생각한다. ItemTags.Browsable이므로 두 옵션이 동일합니다. –
확실히 이러한 플래그 값이 올바르지 않으며 2의 제곱이어야합니까? – user1