PropertyInfo - 获取具有属性的Properties

发布于 2024-11-05 21:14:17 字数 282 浏览 0 评论 0原文

我正在尝试为 Web 表单项目创建自定义属性验证。

我已经可以从我的类中获取所有属性,但现在我不知道如何过滤它们并只获取具有某些属性的属性。

例如:

PropertyInfo[] fields = myClass.GetType().GetProperties();

这将返回所有属性。但是,例如,我如何才能使用“testAttribute”之类的属性返回属性呢?

我已经搜索过这个问题,但经过几次尝试解决这个问题后,我决定在这里问。

I'm trying to create a custom attribute validation for a webform projects.

I already can get all properties from my class, but now i don't know how to filter them and just get the properties that has some attribute.

For example:

PropertyInfo[] fields = myClass.GetType().GetProperties();

This will return me all the properties. But how can i just return the properties using a attribute like "testAttribute", for example?

I've already searched about this but after a few time trying to solve this i decided to ask here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(4

虐人心 2024-11-12 21:14:17

使用 Attribute.IsDefined :

PropertyInfo[] fields = myClass.GetType().GetProperties()
    .Where(x => Attribute.IsDefined(x, typeof(TestAttribute), false))
    .ToArray();

Use Attribute.IsDefined:

PropertyInfo[] fields = myClass.GetType().GetProperties()
    .Where(x => Attribute.IsDefined(x, typeof(TestAttribute), false))
    .ToArray();
女中豪杰 2024-11-12 21:14:17
fields.Where(pi => pi.GetCustomAttributes(typeof(TestAttribute), false).Length > 0)

请参阅GetCustomAttributes() 文档。

fields.Where(pi => pi.GetCustomAttributes(typeof(TestAttribute), false).Length > 0)

See documentation for GetCustomAttributes().

东北女汉子 2024-11-12 21:14:17

您可以使用

    .Any()

并简化表达式

    fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Any())

You can use

    .Any()

and simplify expression

    fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Any())
西瑶 2024-11-12 21:14:17

您可能需要 MemberInfo 的 GetCustomAttributes 方法。如果您专门寻找 TestAttribute,您可以使用:

foreach (var propInfo in fields) {
    if (propInfo.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0) {
        // Do some stuff...
    }      
}

或者如果您只需要获取全部:

var testAttributes = fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0);

You probably want the GetCustomAttributes method of MemberInfo. If you are looking specifically for say, TestAttribute, you can use:

foreach (var propInfo in fields) {
    if (propInfo.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0) {
        // Do some stuff...
    }      
}

Or if you just need to get them all:

var testAttributes = fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文