2011-05-11 3 views
0

가 여기 내 속성 클래스입니다 클래스 당 값을 속성. 예를 들어, Name 속성은 Tag ("UserId") 특성을 갖습니다.고유 속성

확인해야하는 유효성 검사 중 하나는 태그 값 ("UserId")이 클래스 속성마다 고유하다는 것입니다. 다른 속성에는 같은 값 ("UserId")을 가진 태그가 없다는 것을 의미합니다.

저는 LINQ와 함께이 작업을 수행하는 간단한 방법이 있지만 캐스팅도 반드시 수행해야하며 도움이 필요하다고 생각합니다.

사전 :)에서

감사

답변

1

주어진 어셈블리에서 모든 중복 태그를 인쇄합니다이 코드,이 태그가 속성 목록 :

Assembly asm = ... 
var propertiesByTag = 
    from t in asm.GetTypes() 
    from p in t.GetProperties() 
    from a in p.GetCustomAttributes(typeof(TagAttribute)).Cast<TagAttribute>() 
    group p by a.Tag into g 
    select new 
    { 
     Tag = g.Key, 
     Properties = g.ToArray() 
    } 

    foreach (var dup in propertiesByTag.Where(x => x.Properties.Length > 1)) 
    { 
     Console.WriteLine("Duplicated tag: {0}", dup.Tag); 
     foreach(var p in dup.Properties) 
      Console.WriteLine("\t{0}.{1}", p.DeclaringType.Name, p.Name); 
    }