Уникальное значение атрибута свойства для класса - PullRequest
0 голосов
/ 11 мая 2011

Вот мой класс Attribute:

[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 Ответ

1 голос
/ 11 мая 2011

Этот код напечатает все дубликаты тегов в данной сборке и список свойств, имеющих этот тег:

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...