C# 如何通过反射获得没有getter和setter的所有公共静态成员?
我的代码是C# 如何通过反射获得没有getter和setter的所有公共静态成员?,c#,linq,reflection,.net-3.5,C#,Linq,Reflection,.net 3.5,我的代码是 var memberList = from member in type.GetMembers(BindingFlags.Static | BindingFlags.Public) .Where(m => !(m.Name.Contains("get_") || m.Name.Contains("set_") || m.Name.Contains("add_") || m.Name.Contains("remove
var memberList = from member in type.GetMembers(BindingFlags.Static | BindingFlags.Public)
.Where(m => !(m.Name.Contains("get_") || m.Name.Contains("set_") ||
m.Name.Contains("add_") || m.Name.Contains("remove_")) )
select member;
多优雅的方式啊
UPD:在不添加/删除事件处理程序成员的情况下,您可以查询已定义的访问器,然后排除这些访问器:
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);
您可以查询已定义的访问器,然后排除这些访问器:
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);
是否确实要添加事件处理程序的成员?实际上,您只是想获取方法,而不是所有成员吗?您可以使用的否定进行过滤。这可能会也可能不会过滤掉太多。你到底想实现什么?你说的“成员”是什么意思?方法?领域?所有内容?方法、字段、属性和事件的可能副本是否确实要添加事件处理程序的成员?实际上,您只是想获取方法,而不是所有成员吗?您可以使用的否定进行过滤。这可能会也可能不会过滤掉太多。你到底想实现什么?你说的“成员”是什么意思?方法?领域?所有内容?方法、字段、属性和事件@user2217261的可能重复项您是否未使用.NET 4.5?我已将示例修改为与.NET 4.0及更早版本兼容。@user2217261您是否正在使用.NET 4.5?我已经修改了这个示例,使其与.NET4.0及更早版本兼容。