2011-05-13 23 views
1

我在做一個審計類。爲此,我有兩個相同類型的對象,但我不知道是什麼類型。 審計我只需要在人類閱讀文檔中有意義的屬性。只需選擇反映類型字段的主標識符

所以我只想要自定義對象道具的名稱(或主要標識符)。

例如:如果我有一個部門並且我更換了經理。我只需要記錄新的經理姓名。 「經理:約翰 - 比爾」

那麼我怎樣才能列出主要屬性?

- 更多關於
定義我使用的是customAttribute主號標識:

[audit] 
public string Name { get; set; } 

所以,我想從列表中選擇他們,除了原語,用:

var propsOfObject = objectToAudit.GetType().GetProperties(); 
foreach (PropertyInfo propertyInfo in propsOfObejct) { 
    IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields().Where(p => Attribute.IsDefined(p, typeof (AuditAttribute))); 
    if (props.Count() > 0) { 
     dicWithNameValue.Add(propertyInfo.GetType().FullName, props.First().GetValue(objectToAudit).ToString()); 
    } 
} 

對嗎?

+0

你的代碼是否工作?如果是,那麼你在問什麼?如果不是,問題是什麼? – svick 2011-05-13 21:16:24

+0

還不行。我遇到了主對象的原始對象的問題。我的問題旨在問我的解決方案是否有意義,或者我正在重塑車輪.. – Custodio 2011-05-13 21:26:02

回答

2

我想應該是這樣的

IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields() 
         .Where(f => f.GetCustomAttributes(true).OfType<AuditAttribute>()); 

FieldInfo.Attributes您要使用收益FieldAttributes類型的enum並用於不同的目的。見msdn