使用反射和 PropertyInfo 无法识别我的枚举
我有一个审计课程,可以通过反思恢复一切。在我的实际观点中,我需要知道特定属性是否是枚举,但我得到了一个奇怪的行为:
在 foreach 迭代期间 q.PropertyType.IsEnum
返回 false。使用 Quick watcher 属性确实是 false,IsClass 也是如此。所以这基本上没什么:)
进一步研究这个问题,我发现 Nullable Enum 在 IsEnum
中返回 false。我怎样才能忽略这个可为空的并验证该属性是否是枚举?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您的属性为可为空类型时,IsEnum 将返回
false
。在这种情况下,在Nullable.GetUnderlyingType >q.PropertyType
将返回您想要的类型。然后你可以使用 IsEnum 检查。IsEnum will return
false
when your property is of a nullable type. In this case, calling Nullable.GetUnderlyingType onq.PropertyType
will return the type you want. Then you can check with IsEnum.编辑:我已经尝试过你的枚举,它是可以获取的。对 Foo.GetEnumProperties 的调用返回一个包含“TestProp”的数组:
为了执行您想要执行的操作,我使用 System.ComponentModel.DescriptionAttribute,然后您可以像这样获取它:
Edit: I've tried your enum, and it is fetchable. A call to Foo.GetEnumProperties returns an array with "TestProp" in it:
To do what you are trying to do, I use System.ComponentModel.DescriptionAttribute, then you can fetch it like this:
无法识别的枚举的一般问题是它们可以为 Nullable,然后
IsEnum
不起作用。这里就是这种情况,并使用 @Skeet 答案 检查 Type 实例是否是 C# 中可为 null 的枚举 我解决了我的问题。
The general problem with not recognized Enums is that they can be Nullable and then the
IsEnum
doesn't work.This is the case here, and using a @Skeet answer Checking if Type instance is a nullable enum in C# I solve my problem.