[英]Get all static properties from a class
我知道有很多这样的问题,但是我找不到要解决的答案。
考虑以下抽象类:
public abstract class TestBase
{
public static ITest Test => Container.Resolve<ITest>();
public static ITest1 Test1 => Container.Resolve<ITest1>();
public static ITest2 Test2 => Container.Resolve<ITest2>();
public static ITest3 Test3 => Container.Resolve<ITest3>();
}
我正在尝试获取从接口IDummy继承的所有属性,如下所示:
var members = typeof(TestBase).GetMembers(BindingFlags.Static | BindingFlags.Public)
.Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true);
但列表为空。 没有添加where子句“ .Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true)
”,我得到了所有结果,包括属性的吸气剂。
可能有些琐碎,但由于我对反射不太熟悉,因此无法弄清楚自己在做错什么。
从GetMembers
获得的是MemberInfo
实例(对于字段,则是FieldInfo
实例)。 因此,您不能直接检查这些对象是否可从IDummy
分配。
您实际要做的是为字段过滤MemberInfo
对象,然后检查以下每个对象的FieldType
属性:
var members = typeof(TestBase).GetMembers(BindingFlags.Static | BindingFlags.Public)
.OfType<FieldInfo>()
.Where(f => typeof(IDummy).IsAssignableFrom(f.FieldType));
另外,请注意,正如Patrick的注释中所建议的那样,我转过了IsAssignableFrom
调用的主题和对象。
正如我刚刚注意到的那样,您的示例似乎在显示属性,而不是显示field 。 但是,一般技术是相同的。 分别使用PropertyInfo
和PropertyType
而不是FieldInfo
和FieldType
。
最后,除了自己过滤PropertyInfo
,您还可以直接使用GetProperties
方法的重载之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.