如何在 C++/CLI 中通过枚举 class 正确调用带有 switch 的 case 语句?

How to correctly call the case statments with switch by enum class in C++/CLI?

我确实创建了一个枚举以便在不同的选项之间进行选择。在最后阶段,我得到了选择的枚举。

但是我的 switch case 表达式有问题。

枚举:

  public enum class MyObjForm { Rechteck, Ellipse };

经典:

  public ref class Fenster2: public System::Windows::Form{
        private: MyObjForm ^ form;
                 double breite;
                 double hoehe;

        Fenster2(MyObjForm ^ obj, double h, double b) : form{ obj }, hoehe { h }, breite{ b }
    {
        InitializeComponent();
    }
 ..
 }

切换案例:

  switch (form) {
    case MyObjForm::Rechteck:
        gr->DrawRectangle(pen, 30.0f, 30.0f, breite, hoehe);
        break;
      case MyObjForm::Ellipse:
        gr->DrawEllipse(pen, 30.0f, 30.0f, breite, hoehe);
        break;
}

Visual Studio说switch(form)有误应该是整型或者枚举类型。

但是它说:"MyObjForm ^" 类型的 switch 表达式是不允许的。

并且常量表达式不正确。

我没有看到正确答案,但我不喜欢从枚举 class 更改为枚举。 Class 是为了保护它,这样我认为它应该在那里,即使没有它会更容易。我使用枚举是为了学习如何使用它。

public enum class MyObjForm { Rechteck, Ellipse };

MyObjForm ^ form;

托管枚举是值类型,而不是引用类型。 ^ 表示托管引用。对值类型的引用不必要地对其进行装箱,这在 C++/CLI 中是一种奇怪的类型,在 C# 中甚至是不可能的。

所有 个你使用 MyObjForm 的地方删除 ^,你会没事的。

我做到了!

switch((MyObjForm)form){
//cases
}

我确实需要 (MyObjForm) 表单才能使用枚举 class 并且它有效