-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?
您可以使用LINQ Aggregate对所有不同的BindingFlags值进行或运算:
var flags = Enum.GetValues(typeof(BindingFlags))
.Cast<BindingFlags>()
.Aggregate((x,y) => x | y);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |