我有一個自定義屬性BacksCache
,用於在滿足特定條件時需要「默認」的類中標記字段。獲取包含自定義屬性的所有字段
我用下面的代碼:
Type type = obj.GetType();
FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.FlattenHierarchy);
foreach (FieldInfo field in fields)
{
foreach (Attribute at in field.GetCustomAttributes(true))
if (at is BacksCache)
{
field.SetValue(obj, Utils.DefaultValue(field.FieldType));
}
}
此代碼工作正常,只要該類繼承層次是平的。也就是說,如果type
是聲明所有屬性字段的類型,那麼一切都很好。只要我有一個類A
下降類B
(B : A
)和B
有一些歸屬領域的事情崩潰了:只有A
宣佈的字段被檢測到和「違約」。
有問題的字段是private
或private volatile
,如果這有什麼區別。
有關如何解決此問題的任何想法?
+1:對於含糊不清的問題抱歉,你的回答對於原問題的一種解釋是正確的。 – 2009-12-31 08:07:20