带有代码示例的项目-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
PropertyInfo
或
FieldInfo
(因此),并作为一个字段,它们可以继电到实现MemberInfo
方法的实际
PropertyInfo
/FieldInfo
对象。
可以在运行时正确地施放这种实例,例如期望
abstract
的方法。