c# - 检查属性是否具有特定属性?

标签 c#

我正在使用 WCF RIA 服务来做一些小的 Web 应用程序;主要是填充/过滤列表(我对 RIA 的理解还不够好,无法相信我正在正确地进行服务器端验证)。我做的一件事是获取一个列表,其中列出了哪些字段具有哪些泛型类型,我的意思是,字符串是文本类型,小数、 double 、整数是数字等。我使用 LINQ 查询来做到这一点

Fields = type.GetProperties().Where(pi => pi.PropertyType == typeof(string) && pi.GetGetMethod() != null && pi.Name != "DisplayName")
                            .Select(pi => new FieldData
                            {
                                FieldName = CommonResources.AddSpacesToSentence(pi.Name, true),
                                FieldType = "Text"
                            }).....

DisplayName 字段是一个在列表中应该被忽略的特殊字段,但是随着这个应用程序的增长,我意识到这不是一个非常可维护/可扩展/可流行的方式来解决这个问题。我真正想知道的是 DisplayName 属性的元数据是否具有属性 [Display(AutoGenerateField = false)]

有没有一种方法可以在我的 LINQ 中检查它?

更新:

在发布这个之后,我能够慢慢弄清楚如何做到这一点(我以前从未以这种方式使用属性)。 King King 给出的答案看起来不错而且非常通用,但我最终解决这个问题的方式不同,所以如果你对另一种方式感兴趣,这就是我发现的。我将其添加到 LINQ 查询中:

((DisplayAttribute)Attribute.GetCustomAttribute(pi, typeof(DisplayAttribute))).GetAutoGenerateField() == false

最佳答案

您可以使用 GetCustomAttributes使用给定属性过滤属性的方法:

...
.Where(pi => pi.GetCustomAttributes(typeof(DisplayAttribute), true).Any())
...

true 参数包括属性搜索中的继承。

关于c# - 检查属性是否具有特定属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318515/

相关文章:

c# - 通过 LINQ 筛选包含 ICollection 属性的查询

c# - 不使用 Azure 客户端 SDK 连接到 IoT 中心

c# - 如何 "fix"lambda表达式?

C#程序(进程)不会卸载

c# - 在使用LINQ语句添加指示值源的元数据时,如何合并两个列表?

c# - Web API get 上的 405 错误(方法不允许)

c# - 如何检查浏览器是否打开

c# - ASP.NET MVC - 填充下拉列表

c# - .NET Web 服务 - 如何调用非托管 C dll

c# - 从我正在迭代的列表中删除项目,或过滤复杂的重复列表