Каков наилучший способ получить свойство и значение с определенным атрибутом? - PullRequest
1 голос
/ 15 января 2009

Учитывая это определение:

[UniqueId("Ident")]
public class MyClass : MyBase
{
    public int Ident{ get; }
}

Как лучше всего из класса «MyBase» получить атрибут «UniqueId», найти соответствующее имя свойства и получить базовое значение?

Ответы [ 2 ]

2 голосов
/ 15 января 2009

Не будет ли абстрактный метод / свойство в базовом классе более подходящим?

public abstract int UniqueId {get;}

Через атрибуты, вот так:

object GetUniqueId() // or int
{
    Type type = GetType();
    UniqueIdAttribute attrib = null;
    foreach(UniqueIdAttribute tmp in 
        type.GetCustomAttributes(typeof(UniqueIdAttribute), true))
    {
        attrib = tmp;
        break;
    }
    if (attrib == null) throw new InvalidOperationException();
    return type.GetProperty(attrib.PropertyName).GetValue(this, null);
    // perhaps cast here...         
}
1 голос
/ 15 января 2009

Я не совсем понимаю, зачем вам этот атрибут в классе. Разве не было бы более очевидно добавить его в свойство, например так:

public class MyClass
{
    [UniqueId]
    public int Ident{ get; }
}

Вы можете получить доступ к этому значению, используя что-то вроде

var identity = objectThatHasAnIdentity.GetId();

GetId теперь может быть методом расширения в object, который реализует код, подобный тому, что Марк опубликовал выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...