c#枚举功能参数

TK.*_*TK. 8 c# enums function-parameter

作为这个问题的后续.

如何调用函数并传入枚举?

例如,我有以下代码:

enum e1
{
    //...
}

public void test()
{
    myFunc( e1 );
}

public void myFunc( Enum e )
{
    var names = Enum.GetNames(e.GetType());

    foreach (var name in names)
    {
        // do something!
    }

}
Run Code Online (Sandbox Code Playgroud)

虽然当我这样做时,我得到'e1'是'类型'但是使用像'变量'错误消息.有什么想法要帮忙吗?

我试图保持函数通用,以适用于任何Enum而不仅仅是一个特定的类型?这甚至可能吗?...使用通用功能怎么样?这会有用吗?

Mar*_*ser 9

为什么不通过这种类型?喜欢:

 myfunc(typeof(e1));

public void myFunc( Type t )
{
}
Run Code Online (Sandbox Code Playgroud)


bru*_*nde 9

您可以使用通用函数:

    public void myFunc<T>()
    {
        var names = Enum.GetNames(typeof(T));

        foreach (var name in names)
        {
            // do something!
        }
    }
Run Code Online (Sandbox Code Playgroud)

并打电话给:

    myFunc<e1>();
Run Code Online (Sandbox Code Playgroud)

(编辑)

如果您尝试约束TEnum或,编译器会抱怨enum.

因此,为确保类型安全,您可以将功能更改为:

    public static void myFunc<T>()
    {
        Type t = typeof(T);
        if (!t.IsEnum)
            throw new InvalidOperationException("Type is not Enum");

        var names = Enum.GetNames(t);
        foreach (var name in names)
        {
            // do something!
        }
    }
Run Code Online (Sandbox Code Playgroud)


And*_*are 5

您试图将枚举的类型作为该类型的实例传递 - 尝试这样的事情:

enum e1
{
    foo, bar
}

public void test()
{
    myFunc(e1.foo); // this needs to be e1.foo or e1.bar - not e1 itself
}

public void myFunc(Enum e)
{
    foreach (string item in Enum.GetNames(e.GetType()))
    {
        // Print values
    }
}
Run Code Online (Sandbox Code Playgroud)