C# 将枚举作为参数传递

C# 将枚举作为参数传递,c#,types,parameters,enumeration,C#,Types,Parameters,Enumeration,我正在尝试制作一个简单的类似流氓的游戏,以便更好地学习C#。我试图建立一个通用方法,我可以给它一个枚举作为参数,它将返回该枚举中有多少元素作为int。我需要使它尽可能通用,因为我将有几个不同的类调用该方法 我已经搜索了大约一个小时了,但是我在这里找不到任何资源或者其他可以完全回答我问题的资源。。。对于C#,我仍处于初级-中级阶段,因此我仍在学习所有的语法,但到目前为止,我掌握了以下内容: // Type of element public enum ELEMENT { FIRE, WAT

我正在尝试制作一个简单的类似流氓的游戏,以便更好地学习C#。我试图建立一个通用方法,我可以给它一个枚举作为参数,它将返回该枚举中有多少元素作为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()

//统计枚举类型中存在多少不同的成员
公共整数元素()
{
if(!typeof(T).IsEnum)
抛出新的InvalidOperationException(“T必须是枚举”);
返回Enum.GetNames(typeof(T)).Length;
}
//调用上述函数
公共图书馆
{
int num=countElements();
}

在运行时修改枚举的目的是什么?没有代码会使用附加值,而使用修改/删除值的代码会中断。如果您想拥有可以在运行时动态更改的数据元素列表,请使用数据库。你可以通过一些简单的文本文件来改变各种各样的东西,这些文件是游戏启动时解析出来的。不确定他们是如何设置的,虽然我猜如果你必须硬编码枚举才能使用它们,那么它就不会使用它们。。。也许是一本字典?安东尼:很好,编译和工作都如期进行大卫:我正试图以较小的规模模仿矮人堡垒。你可以通过一些简单的文本文件来改变各种各样的东西,这些文件是游戏启动时解析出来的。不确定他们是如何设置的,虽然我猜如果你必须硬编码枚举才能使用它们,那么它就不会与它们一起使用。我不知道类型上的IsEnum,它从4.0开始就存在了。很高兴有你。
    // 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>();
    }