我尝试了一些程序...我想运行一个程序,并在C#类中查看所有方法名称...
这是代码

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");
    }
}

一切正常,结果我得到了
 adf
 main
 bdf

现在,我只想将一个参数传递给GetMethods函数并获取结果...我认为这不是通过'binary or(|)'传递5个参数的好方法...在BindingFlags中,Enum是19个字段,如果我想传递18个参数xD ,将会是什么
我怎样才能只传递一个值?

这是枚举
 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,
  }
}

我认为这是一个非常有趣且有用的问题...

最佳答案

在BindingFlags枚举的主体处进行attantion,所有值均为2的幂。因此,二进制或仅计算提供的整数值的总和。为了传递所有标志,只需发送所有int值的总和即可。为了仅传递某些值,只需在需要传递的标志的相应位置发送带有1的二进制整数。请参见下面的代码。

BindingFlags flag = (BindingFlags)Convert.ToInt32("0000010010000101010", 2)

你的例子必须是
BindingFlags flag = (BindingFlags)Convert.ToInt32("111110", 2)

当我们打印flag时,我们有一个
DeclaredOnly, Instance, Static, Public, NonPublic

你会得到方法
            Type t = typeof(Program);
            MethodInfo[] mi = t.GetMethods(flag);

是的,这是一个非常有趣的问题。

关于c# - 简单的方法来获取C#中的所有Enum值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6954947/

10-11 22:27
查看更多