Attribute.isdefined()不适用于我的自定义会员类型

问题描述 投票:0回答:1

带有代码示例的项目-https://github.com/mgoldste1/variableinfo-project

简而言之,我厌倦了分别处理物业和领域。我做了一个可变的策略模式来处理两者,而不必知道它是什么类型。您可以为上下文提供fieldInfo或propertyInfo的上下文,并使其成为可变的。有用于拉动类型的字段和属性的扩展名,并将所有这些字段返回为变量对象。

当检查属性是否在属性或字段上定义属性时,ISDEDISE的作品如预期的。我在上下文中使用了一个ISATTRIBEDIANS定义的方法,该方法使用属性。ISDEFINED,并且可以正常使用,因为它使用propertyInfo或fieldInfo对象作为输入。当输入是变量info对象时,问题是属性。 它适用于字段,但不适合属性。当您将几个级别跳入该方法时,您可以看到它失败的点-

return element.MemberType switch { MemberTypes.Property => InternalIsDefined((PropertyInfo)element, attributeType, inherit), MemberTypes.Event => InternalIsDefined((EventInfo)element, attributeType, inherit), _ => element.IsDefined(attributeType, inherit), };

是从成员Internfo元素变量到propertyInfo版本的铸件。 
System.InvalidCastException: 'Unable to cast object of type 'System.Reflection.VariableInfo' to type 'System.Reflection.PropertyInfo'.'

领域走了一条不同的道路,这就是为什么这些田野有效的原因。

上下文具有隐式/明确的操作员覆盖,因此我可以尽可能多地来回抛弃对象。这在我的测试代码中正常工作:

PropertyInfo asPropInfo = (PropertyInfo)VariableInfoObjectContainingAProperty;

我可以做到,但是attribute.isdectined of nothers of。我知道我不需要使用attribute.isdefined,但是我希望所有路径都可以检查属性是否有效。
任何人都知道为什么会失败或如何解决?
使用.NET框架4.7.2

也许您可以使

VariableInfo

接口。
c# reflection system.reflection
1个回答
0
投票
PropertyInfo

FieldInfo
(因此),并作为一个字段,它们可以继电到实现

MemberInfo

方法的实际

PropertyInfo
/
FieldInfo
对象。
可以在运行时正确地施放这种实例,例如期望
abstract
的方法。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.