构造函数中的枚举类型

Enum type in constructor

所以我必须从 class 启动一个对象到主窗体,但我必须放入构造函数的参数来自我在 class 中创建的枚举类型。

    private List<Geluidsfragment> fragmenten;
    private enum ThemaSoorten 
    { 
        Muziek, 
        Luisterboeken, 
        Cabaretshows 
    }    

^这部分现在在 class 之外,正如所建议的那样。

// Constrcutors

    public BGExperience(ThemaSoorten thema)
    {
        fragmenten = new List<Geluidsfragment>();
        this.thema = thema;
    }    

这些是字段和字段的构造函数。下面是我需要的这个class对象的初始化

public GeluidsfragmentForm()
    {
        InitializeComponent();
        BGExperience bgExperience = new BGExperience("Muziek");
    }

所以重载必须是 ThemaSoorten 类型并且必须在枚举中,但此时它卡住了。

有人知道如何解决这个问题吗?

BGExperience bgExperience = new BGExperience(ThemaSoorten.thema1);

你应该先把你的 enum 设为 public 然后试试这个:

BGExperience bgExperience = new BGExperience(BGExperience.ThemaSoorten.Muziek);

如果您不将 enum 设为 public,您将无法在 class 之外访问它,更不用说创建 [=] 的实例了46=].

更新

正如 Sriram 在他的评论中正确指出的那样,不使此 enum 成为嵌套类型将是更好的设计方法。您可以在 class 之外声明它,例如:

public enum ThemaSoorten 
{ 
    Muziek, 
    Luisterboeken, 
    Cabaretshows 
}

然后创建一个新的 BGExperience 对象,如下所示:

var bgExperience = new BGExperience(ThemaSoorten.Muziek);

重要说明(感谢 Selman22)

您不能用您已经完成的方式声明 enum。这甚至无法编译。此外,您应该在输入时收到一条错误消息。无论如何,定义 enum 的正确方法如下:

public enum EnumName
{
    Member1,
    Member2,
    Member3
}

代替 EnumName 你应该用你的 enum 代替 Member1, Member2Member3枚举中的项目。如果你想让这个项目有特定的值,你应该这样做:

public enum EnumName
{
    Member1 = 1,
    Member2 = 2,
    Member3 = 3
}

或者您可能想向构造函数提供枚举的字符串值,那么它将如何工作:

BGExperience bgExperience = new BGExperience((BGExperience.ThemaSoorten)Enum.Parse(typeof(BGExperience.ThemaSoorten), "Muziek"));

确保为此创建枚举 public。否则,您必须在构造函数中提供字符串并将其解析为构造函数中的枚举值。