Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过反射获得没有getter和setter的所有公共静态成员?_C#_Linq_Reflection_.net 3.5 - Fatal编程技术网

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及更早版本兼容。