只需通过反射选择类型中字段的主标识符

发布于 2024-11-07 03:34:33 字数 802 浏览 1 评论 0原文

我正在上审计课。为此,我有两个相同类型的对象,但我不知道是什么类型。 为了进行审计,我只需要在人类阅读文档中有意义的属性。

所以我只想要自定义对象道具的名称(或主要标识符)。

示例:如果我有一个部门并且我更换了经理。我只需要记录新经理的姓名。 “经理:约翰-比尔”

那么我怎样才能只列出主要属性呢?

--更多关于
为了定义主要标识符,我使用的是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅紫色的梦幻 2024-11-14 03:34:33

我认为您尝试使用的 FieldInfo.Attributes 应该像这样

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

返回 FieldAttributes 类型的 enum 并用于不同的目的。请参阅 msdn

I think it should be like this

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

FieldInfo.Attributes that you are trying to use returns an enum of type FieldAttributes and is used for a different purpose. See msdn.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文