我正在反思一个对象,只想要一个实例的公共属性,我不想要公共的静态属性。问题是GetProperties()
返回静态和实例公共属性。任何人都知道如何最好地解决这个问题?
private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos()
{
return dataExtractor.GetType().GetProperties().OrderBy(
p => p.Name );
}
注意,我对列表进行排序,因为GetProperties()
没有指定任何类型的排序,而且排序对我很重要。
答案 0 :(得分:1)
使用the other overload of GetProperties,您可以指定绑定标记,例如BindingFlags.Instance
。
return dataExtractor.GetType().GetProperties(
BindingFlags.Instance | BindingFlags.Public).OrderBy(
p => p.Name );
答案 1 :(得分:1)
private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos()
{
return dataExtractor.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.OrderBy( p => p.Name );
}
答案 2 :(得分:0)
是的,您需要在构造函数中设置绑定标志。绑定标志指定控制绑定的标志以及通过反射进行成员和类型搜索的方式。请查看以下内容以获取更多信息:
BindingFlags Enumeration: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx
答案 3 :(得分:0)
只需指出其他答案的附录 - 如果您不想要继承属性,也可以使用BindingFlags.DeclaredOnly
。