3
인사에 StackOverflow,.NET 신고 열거 GET 값에서 속성
나는 국기와 함께 열거 형은 내가 모두를 검색 할 수있는 방법, 자신의 속성이 열거 형의 값뿐만 아니라 속성을 가지고있는 경우에 적절한 속성?
IEnumerable<EnumDisplayNameAttribute> attributes =
Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.Where(v => enumVar.HasFlag(v))
.Select(v => typeof(MyEnum).GetField(v.ToString()))
.Select(f => f.GetCustomAttributes(typeof(EnumDisplayNameAttribute), false)[0])
.Cast<EnumDisplayNameAttribute>();
또는 쿼리 구문에
:IEnumerable<EnumDisplayNameAttribute> attributes =
from MyEnum v in Enum.GetValues(typeof(MyEnum))
where enumVar.HasFlag(v)
let f = typeof(MyEnum).GetField(v.ToString())
let a = f.GetCustomAttributes(typeof(EnumDisplayNameAttribute), false)[0]
select ((EnumDisplayNameAttribute)a);
또는 경우를 가능한 여러 속성이있을 수 Linq에를 사용하여
[Flags()]
enum MyEnum
{
[EnumDisplayName("Enum Value 1")]
EnumValue1 = 1,
[EnumDisplayName("Enum Value 2")]
EnumValue2 = 2,
[EnumDisplayName("Enum Value 3")]
EnumValue3 = 4,
}
void Foo()
{
var enumVar = MyEnum.EnumValue2 | MyEnum.EnumValue3;
// get a collection of EnumDisplayName attribute objects from enumVar
...
}
와우,이 환상적이다. 나는 바로 이것을 시도 할 것이다. – LamdaComplex
더 많은 커피가 필요 하겠지만'Where (v => (enumVar & v)! = v)'절이 맞습니까? '(enumVar & v) == v' 또는'(enumVar & v)! = 0'이 아니어야합니까? 편집 : 신경 쓰지 마세요, 커피 좀 갖다 드리죠. EDITx2 : 아니, 나는 내가 옳다고 생각해. 오 이런, 나는 내 마음을 잃어 가고있어. –
@ChrisSinclair 예 처음에는'! = 0'을 사용 했었지만'== v'가 더 좋을 수도 있지만 ('! ='를 수정하지는 못했지만) 실제로'.HasFlag (v)'가 둘 다. 나는 커피도 필요하다고 생각한다 : p –