每个类的唯一属性属性值

本文关键字:属性 唯一 | 更新日期: 2023-09-27 17:56:19

这是我的属性类:

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

这个想法是创建一个类,并使用标签属性和标签值修饰每个属性。例如:属性 Name 将具有属性 Tag("UserId")

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

我很确定有一种简单的方法可以使用 LINQ 执行此操作,但强制转换也必须完成,我将不胜感激:)

提前致谢:)

每个类的唯一属性属性值

此代码将打印给定程序集中的所有重复标记,以及具有此标记的属性列表:

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);
    }