C# 枚举作为函数参数?

发布于 2024-07-12 09:31:45 字数 296 浏览 11 评论 0原文

你能传递一个标准的 C# 枚举作为参数吗?

例如:

enum e1
{
    //...
}

enum e2
{
    //...
}

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

public void myFunc( Enum e )
{
    // Iterate through all the values in e
}

通过这样做,我希望检索任何给定枚举中的所有名称。 迭代代码是什么样的?

Can you pass a standard c# enum as a parameter?

For example:

enum e1
{
    //...
}

enum e2
{
    //...
}

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

public void myFunc( Enum e )
{
    // Iterate through all the values in e
}

By doing this I hope to retrieve all the names within any given enum. What would the Iteration code look like?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

轻拂→两袖风尘 2024-07-19 09:31:45

这!

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

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

编辑:我的错,你确实迭代

注意:我知道我可以在 foreach 语句中执行 GetNames() 调用,但我更喜欢首先将这种类型的东西分配给方法调用,因为它便于调试。

This!

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

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

EDIT: My bad, you did say iterate.

Note: I know I could just do the GetNames() call in my foreach statement, but I prefer to assign that type of thing to a method call first, as it's handy for debugging.

享受孤独 2024-07-19 09:31:45

使用 Enum.GetNames( typeof(e) ) 方法,这将返回包含名称的字符串数组。

您还可以使用 Enum.GetValues 来获取对应值。

编辑 -哎哟 - 如果您将参数作为 Enum 传递,则需要使用 e.GetType() 而不是 typeof(),如果您将参数作为实际 Enum 类型名称传递,则将使用 typeof()。

Use the Enum.GetNames( typeof(e) ) method, this will return an array of strings with the names.

You can also use Enum.GetValues to obtain the counterpart values.

Edit -Whoops - if you are passing the parameter as Enum, you will need to use e.GetType() instead of typeof() which you would use if you had passed the parameter in as the actual Enum type name.

放赐 2024-07-19 09:31:45

你的意思是类似 Enum.GetNames 的东西?

You mean something like Enum.GetNames?

潇烟暮雨 2024-07-19 09:31:45

枚举.GetValues
Enum.GetNames

所以类似...

foreach(e1 value in Enum.GetValues(typeof(e1)))

Enum.GetValues
Enum.GetNames

so something like...

foreach(e1 value in Enum.GetValues(typeof(e1)))
装迷糊 2024-07-19 09:31:45

如果您尝试将 enum 直接传递给 myFunc,则会遇到麻烦,如下例所示:

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"

You will have trouble if you try passing an enum directly to myFunc, as in the following example:

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"
痴者 2024-07-19 09:31:45

像这样:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }

Like this:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }
风启觞 2024-07-19 09:31:45

正确的是:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}

correct is:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文