每个类的唯一属性属性值

时间:2011-05-11 08:29:49

标签: c# attributes

这是我的属性类:

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

    public string Tag { get; set; }
}

我们的想法是创建一个类并使用tag属性和标记值来装饰每个属性。例如:属性Name将具有属性Tag(“UserId”)

我需要检查的一个验证是标签值(“UserId”)对于每个类属性是唯一的。意味着没有其他属性具有相同值的标记(“UserId”)

我很确定使用LINQ有一种简单的方法可以做到这一点但是必须完成投射并且我会感激一些帮助:)

提前致谢:)

1 个答案:

答案 0 :(得分: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);
    }