1

我有我的

class BaseClass
{

}

和两个像这样的子类:

[PostTransformer("test", Precedence=5)]
class SubClassA : BaseClass
{

}

和一个属性

[System.AttributeUsage(System.AttributeTargets.Class)]
public class PostTransformerAttribute : Attribute
{
    public int Precedence;
    public string Title;

    public PostTransformerAttribute(string Title)
    {
        this.Title = Title;
        Precedence = int.MaxValue;
    }

}

如何获取PostTransformerAttributeBaseClass 的所有子类的类型的所有属性?

我努力了:

var test = typeof(BaseClass).GetTypeInfo().GetCustomAttributes<PostTransformerAttribute>();

但它返回了一个空数组。

4

2 回答 2

3

是的,它是空的,您目前正在尝试仅获取基类的属性。

您想要枚举从您的基类继承的所有类型的列表。

即类似的东西:

var baseType = typeof(BaseClass);
var types = Assembly
    .GetExecutingAssembly()
    .GetTypes()
    .Where(z => baseType.IsAssignableFrom(t) && t.GetCustomAttributes(typeof(PostTransformerAttribute), true).Any());

(实际上没有经过测试,但这是这个想法)

于 2013-05-16T18:00:51.820 回答
1
    public static void loadTransformers()
    {
        var baseType = typeof(BaseClass).GetTypeInfo();
        var attributes = baseType.Assembly.DefinedTypes.Where(
            z => baseType.IsAssignableFrom(z))
            .SelectMany(t => t.GetCustomAttributes<PostTransformerAttribute>(false));


    }

这适用于橱窗商店应用程序。

于 2013-05-16T18:15:11.813 回答