2011-05-11 103 views
0

这里是我的属性等级:独特的属性属性值每班

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 
public class TagAttribute : Attribute 
{ 
    public TagAttribute (string tag) 
    { 
     Tag = tag; 
    } 

    public string Tag { get; set; } 
} 

的想法是,你创建一个类,装饰与标签属性和标签值的每个属性。例如:属性名称将具有属性标记(“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); 
    }