当前位置:  开发笔记 > 编程语言 > 正文

c#枚举功能参数

如何解决《c#枚举功能参数》经验,为你挑选了3个好方法。

作为这个问题的后续.

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

例如,我有以下代码:

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!
    }

}

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

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



1> Martin Moser..:

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

 myfunc(typeof(e1));

public void myFunc( Type t )
{
}



2> bruno conde..:

您可以使用通用函数:

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

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

并打电话给:

    myFunc();

(编辑)

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

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

    public static void myFunc()
    {
        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!
        }
    }



3> Andrew Hare..:

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

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
    }
}

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有