我知道BindingFlags用于从Type中获取公共成员和非公共成员。
但是有没有办法确定MemberInfo实例(或者像PropertyInfo,MethodInfo这样的派生)是否公开(在从Type上的某个方法返回之后)?
感谢名单, 马克
答案 0 :(得分:7)
PropertyInfo
,MethodBase
等每个都有Attributes
属性,其中包含此信息 - 但MemberInfo
中没有任何内容,因为每种成员都有自己的属性枚举。虽然很隐蔽,但我认为可能需要单独处理MemberInfo
的每个子类:(您可以打开MemberInfo.MemberType
然后进行强制转换,这将是略微比许多as
/ test-for-null分支更好,但它仍然不理想:(
if (member.MemberType == MemberTypes.Property)
{
var property = (PropertyInfo) member;
...
}
答案 1 :(得分:0)
您可以尝试:
var isPublic = memberInfo.MemberType switch
{
MemberTypes.Field => ((FieldInfo)memberInfo).IsPublic,
MemberTypes.Property => ((PropertyInfo)memberInfo).GetAccessors().Any(MethodInfo => MethodInfo.IsPublic),
_ => false
};
对于属性,如果有任何公共访问器,则返回true,我认为这是您追求的目标