FieldInfo有一个IsStatic成员,但PropertyInfo没有。我想我可能只是忽略了我需要的东西。
Type type = someObject.GetType();
foreach (PropertyInfo pi in type.GetProperties())
{
// umm... Not sure how to tell if this property is static
}
FieldInfo有一个IsStatic成员,但PropertyInfo没有。我想我可能只是忽略了我需要的东西。
Type type = someObject.GetType();
foreach (PropertyInfo pi in type.GetProperties())
{
// umm... Not sure how to tell if this property is static
}
https://learn.microsoft.com/en-us/dotnet/api/system.reflection.propertyinfo
作为一个实际的快速简单解决方案来回答这个问题,你可以使用这个:
propertyInfo.GetAccessors(nonPublic: true)[0].IsStatic;
public static class PropertyInfoExtensions
{
public static bool IsStatic(this PropertyInfo source, bool nonPublic = false)
=> source.GetAccessors(nonPublic).Any(x => x.IsStatic);
}
用法:
property.IsStatic()
type.GetProperties(BindingFlags.Static)
BindingFlags.Public
、BindingFlags.NonPublic
或两者都有)。其次,它只是列出了静态属性(输入是Type
,输出是PropertyInfo[]
),而问题是“给定一个属性,如何确定它是否是静态的?”(输入是PropertyInfo
,输出是bool
)。我猜你提议的最接近的东西就是在末尾加上.Contains(property)
,但我认为这将是一个次优解。 - Grx70
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy
对我起了作用。 - Jonathon Reinhart