定義されたアクセサーのクエリを作成し、それらを除外できます。
var propertyAccessors = type.GetProperties(BindingFlags.Static | BindingFlags.Public)
.SelectMany(p => p.GetAccessors())
.Cast<MemberInfo>();
var eventAccessors = type.GetEvents(BindingFlags.Static | BindingFlags.Public)
.SelectMany(e => new[] {
e.GetAddMethod(true),
e.GetRemoveMethod(true)
})
.Cast<MemberInfo>();
var accessors = propertyAccessors.Concat(eventAccessors);
var memberList = type.GetMembers(BindingFlags.Static | BindingFlags.Public)
.Except(accessors);
特別な名前を持たないメソッドだけを除外することで回避できる場合があります ( MethodBase.IsSpecialName
.
var memberList = type.GetMembers(BindingFlags.Static | BindingFlags.Public)
.Where(m => {
var method = m as MethodBase;
return method == null || !method.IsSpecialName;
});