只需通过反射选择类型中字段的主标识符
我正在上审计课。为此,我有两个相同类型的对象,但我不知道是什么类型。 为了进行审计,我只需要在人类阅读文档中有意义的属性。
所以我只想要自定义对象道具的名称(或主要标识符)。
示例:如果我有一个部门并且我更换了经理。我只需要记录新经理的姓名。 “经理:约翰-比尔”
那么我怎样才能只列出主要属性呢?
--更多关于
为了定义主要标识符,我使用的是 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());
}
}
正确的方法吗?
I'm doing a audit class. For that I've two object of same type, but I don't know what type.
To audit I just need the properties that make sense in a human reading document.
So I just want the Name (or main identifier) of custom object props.
Example: If I've a department and I change the manager. I need to log just the new manager Name. "Manager: John - Bill"
So how can I list just the main properties?
-- more about
To define the main identifier I'm using a customAttribute:
[audit]
public string Name { get; set; }
So, I'm thinking in pick them from a list, that except the primitives, with:
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());
}
}
right way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您尝试使用的
FieldInfo.Attributes
应该像这样返回
FieldAttributes
类型的enum
并用于不同的目的。请参阅 msdn。I think it should be like this
FieldInfo.Attributes
that you are trying to use returns anenum
of typeFieldAttributes
and is used for a different purpose. See msdn.