How to get all members on a type elegantly?

-2 c# reflection

I've been through "Questions that may already have your answer" and didn't find the thing I'm looking for. I want to get all members on a type via reflection. When I try

var type = typeof(int);
var members = type.GetMembers();
for(var i = 0; i < members.Length; i++)
    Console.WriteLine($"{i, 2} {members[i]}");
Run Code Online (Sandbox Code Playgroud)

I get 19 members.

I found that some members need specific BindingFlags. Since I don't know those flags and different members have different flags I pass all flags like this:

var type = typeof(int);
var flags =
    BindingFlags.IgnoreCase | BindingFlags.DeclaredOnly | BindingFlags.Instance |BindingFlags.Static |
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.InvokeMethod |
    BindingFlags.CreateInstance | BindingFlags.GetField | BindingFlags.SetField | BindingFlags.GetProperty |
    BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty | BindingFlags.ExactBinding |
    BindingFlags.SuppressChangeType | BindingFlags.OptionalParamBinding | BindingFlags.IgnoreReturn;
var members = type.GetMembers(flags);
for(var i = 0; i < members.Length; i++)
    Console.WriteLine($"{i, 2} {members[i]}");
Run Code Online (Sandbox Code Playgroud)

It gives me 34 members. That's exactly what I need.

But is where a more elegant (shorter) way to get all members?

Adr*_*ian 5

您可以使用LINQ Aggregate对所有不同的BindingFlags值进行或运算:

var flags = Enum.GetValues(typeof(BindingFlags))
                .Cast<BindingFlags>()
                .Aggregate((x,y) => x | y);
Run Code Online (Sandbox Code Playgroud)