获取具有特定属性的属性和值的最佳方法是什么?

时间:2009-01-15 15:09:11

标签: c# reflection attributes

鉴于此定义:

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

“MyBase”类获取“UniqueId”属性的最佳方法是什么,找到匹配的属性名称并获取基础值?

2 个答案:

答案 0 :(得分:2)

基类中的抽象方法/属性不是更合适吗?

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 :(得分:1)

我不完全理解你为什么要在课堂上使用这个属性。将它添加到属性中是不是更明显,如下所示:

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

您可以使用

之类的内容访问此值
var identity = objectThatHasAnIdentity.GetId();

GetId现在可以是object上的扩展方法,它实现类似于Marc上面发布的代码