Chu*_*ris 5 .net c# enums getmethod
我试过一个小程序...我想运行一个程序,看看c#class中的所有方法名称......这是代码
class Program
{
public int adf()
{
return 0;
}
static void Main(string[] args)
{
foreach (MethodInfo mInfo in typeof(Program).GetMethods(BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static))
{
Console.WriteLine(mInfo.Name);
}
Console.ReadKey();
}
private void bdf()
{
Console.WriteLine("Dg");
}
}
Run Code Online (Sandbox Code Playgroud)
它的工作正常,结果我得到了这个
adf
main
bdf
Run Code Online (Sandbox Code Playgroud)
现在,我想传递给GetMethods函数只有一个参数并得到结果......我认为这不是用'二进制或(|)'传递5个参数的好方法...在BindingFlags Enum是19个字段和什么如果我想传递18个参数xD 我怎么能只传递一个值呢?
这是Enum
public enum BindingFlags
{
Default = 0,
IgnoreCase = 1,
DeclaredOnly = 2,
Instance = 4,
Static = 8,
Public = 16,
NonPublic = 32,
FlattenHierarchy = 64,
InvokeMethod = 256,
CreateInstance = 512,
GetField = 1024,
SetField = 2048,
GetProperty = 4096,
SetProperty = 8192,
PutDispProperty = 16384,
PutRefDispProperty = 32768,
ExactBinding = 65536,
SuppressChangeType = 131072,
OptionalParamBinding = 262144,
IgnoreReturn = 16777216,
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是非常有趣和有用的问题......
下面的代码应该得到一个包含所有标志的值(可以很容易地成为通用方法),然后你可以做到AllFlags & ~FlagToRemove除了一个标志之外的所有标志.
AllFlags = (EnumFlagType)Enum.GetValues(typeof(EnumFlagType))
.Cast<int>().Aggregate((acc, next) => acc | next);
Run Code Online (Sandbox Code Playgroud)
[Flags]
enum TestEnum { one = 1, two = 2, three = 4, four = 8 };
void Main()
{
var AllFlags = (TestEnum)Enum.GetValues(typeof(TestEnum))
.Cast<int>().Aggregate((acc, next) => acc | next);
Console.WriteLine(AllFlags); // Prints "one, two, three, four"
Console.WriteLine(AllFlags & ~two); // Prints "one, three, four"
}
Run Code Online (Sandbox Code Playgroud)
请注意 BindingFlags 枚举的主体,所有值都是 2 的幂。因此二进制或仅计算提供的整数值的总和。为了传递所有标志,只需发送所有 int 值的总和。为了仅传递某些值,只需在需要传递的标志的相应位置发送带有 1 的二进制整数。请参阅下面的代码。
BindingFlags flag = (BindingFlags)Convert.ToInt32("0000010010000101010", 2)
Run Code Online (Sandbox Code Playgroud)
因为你的例子必须是
BindingFlags flag = (BindingFlags)Convert.ToInt32("111110", 2)
Run Code Online (Sandbox Code Playgroud)
当我们打印时flag我们有一个
DeclaredOnly, Instance, Static, Public, NonPublic
Run Code Online (Sandbox Code Playgroud)
你可以得到方法
Type t = typeof(Program);
MethodInfo[] mi = t.GetMethods(flag);
Run Code Online (Sandbox Code Playgroud)
是的,这是一个非常有趣的问题。