将枚举作为参数传递

本文关键字:参数传递 枚举 | 更新日期: 2023-09-27 18:30:07

我正在尝试制作一个简单的Roguelike游戏来更好地学习C#。我正在尝试制作一个通用方法,我可以给它一个Enum作为参数,它将返回该Enum中有多少元素作为int。我需要使它尽可能通用,因为我将有几个不同的类调用该方法。

在过去的一个小时左右,我四处寻找,但在这里或其他地方找不到任何能完全回答我问题的资源。。。我仍然处于C#的初级中间阶段,所以我仍然在学习所有的语法,但这是我迄今为止所拥有的:

// Type of element
public enum ELEMENT
{
    FIRE, WATER, AIR, EARTH
}

// Counts how many different members exist in the enum type
public int countElements(Enum e)
{
    return Enum.GetNames(e.GetType()).Length;
}

// Call above function
public void foo()
{
    int num = countElements(ELEMENT);
}

它编译时出现错误"参数1:无法从"System.Type"转换为"System.Enum"。我有点明白为什么它不起作用,但我只需要一些指导来正确设置一切。

谢谢!

PS:有可能在运行时更改枚举的内容吗?程序执行时?

将枚举作为参数传递

试试这个:

public int countElements(Type type)
{
    if (!type.IsEnum)
        throw new InvalidOperationException();
    return Enum.GetNames(type).Length;
}
public void foo()
{
    int num = countElements(typeof(ELEMENT));
}

您也可以使用泛型方法来完成此操作。就我个人而言,我更喜欢这种foo()方法的语法,因为您不必指定typeof()

    // Counts how many different members exist in the enum type
    public int countElements<T>()
    {
        if(!typeof(T).IsEnum)
            throw new InvalidOperationException("T must be an Enum");
        return Enum.GetNames(typeof(T)).Length;
    }
    // Call above function
    public void foo()
    {
        int num = countElements<ELEMENT>();
    }