私は少し問題に取り組みましたが、これは一般的に利用可能な解決方法では解決できません。動的に生成されたクラスから属性を取得する
は考えてみましょう:
を私は知られている基本クラスから継承し、動的に生成されたクラスのセットを持っている(BaseClass
それを呼び出すことができます)。 これらの動的生成クラスも、関連付けられた属性を持つProperties
を動的に生成しました。動的に生成されていないが
属性は、カスタムクラスでもある:
List<PropertyInfo> result = target.GetType()
.GetProperties()
.Where(
p =>
p.GetCustomAttributes(typeof(TypeAttribute), true)
//.Where(ca => ((TypeAttribute)ca).)
.Any()
)
.ToList();
:
[AttributeUsage(AttributeTargets.Property)]
class TypeAttribute: Attribute
{
private Type _type;
public Type Type
{
get { return _type; }
}
public TypeAttribute(Type t)
{
_type = t;
}
}
は、それから私は、もちろんのランタイムは、この割り当てられた属性の値を取得したいですtarget
はBaseClass
のサブクラスです。リストresult
は空ですが、これが私を困惑させます。
私はdataType
が属性に格納するタイプで、tb
は、クラスのTypeBuilder
ある
PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName,
PropertyAttributes.HasDefault, propertyType, null);
ConstructorInfo classCtorInfo = typeof(TypeAttribute).
GetConstructor(new Type[] { typeof(Type) });
CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(
classCtorInfo, new object[] { getType(dataType) });
propertyBuilder.SetCustomAttribute(myCABuilder);
を使用して属性を追加します。
プロパティでgetCustomAttributes()
を実行すると、私が探しているもの以外の予想される属性が得られます。しかし、私がgetCustomAttributesData()
を実行した場合、私はそれらのすべてを取得しますが、私が探しているのはタイプCustomAttributeData
であり、TypeAttribute
にキャストできません(VSデバッガのインスタンスを調べると、含まれている情報がTypeAttribute
)。 これは問題の症状ではないかと推測していますが、その原因を見つけることはできません。
リストが空である理由を誰にでも指摘できますか?
これは楽しいことです。それは私のためにテストリグをセットアップするために数分かかるでしょう...私はそれを行う間に誰かが明白な何かを見つけることを望んでいる! –