2017-05-08 1 views
0

ich die folgende Klasse erstellt haben:C# nicht Enum Klassenvariablen erreichen

namespace com.censureret.motions 
{ 
    public class EnumPlayerStances { 
     public const int OneHandSword = 50; 

     /// <summary> 
     /// Friendly name of the type 
     /// </summary> 
     public static string[] Names = new string[] { 
      "One handed Sword" 
      }; 
    } 
} 

Nun wünsche ich dies in meiner folgenden Klasse verwenden:

namespace com.censureret.motions{ 
    public class OneHandSword_Idle : MotionControllerMotion 
    { 
     public override bool TestActivate() 
     { 
      if (!mIsStartable) { return false; } 
      if (!mMotionController.IsGrounded) { return false; } 

      if (mActorController.State.Stance != EnumPlayerStances.OneHandSword) 

       return false; 
     } 

    } 
} 

jedoch Visual Studio sagt sein einen Fehler .

Ich bin ziemlich neu in C# Also hoffe ich, dass ihr mir helfen könnt? :)

+0

Welcher Typ ist "mActorController.State.Stance"? Sie vergleichen es mit dem const int der EnumPlayerStances-Klasse. Es sieht so aus, als könnte diese Klasse umstrukturiert werden, um benutzerfreundlicher zu sein. Was repräsentiert der Wert 50? Welche anderen Dinge erwarten Sie in das String-Array? – Vidar

Antwort

1

Sie besiegt den Punkt eines Enum. Es sollte folgendermaßen deklariert und verwendet werden:

using System; 

namespace StackOverflow_Events 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string enumName = Enum.GetName(typeof(EnumPlayerStances), EnumPlayerStances.One_Handed_Sword).Replace("_", " "); 
      int value = (int)EnumPlayerStances.One_Handed_Sword; 
      var example = EnumPlayerStances.One_Handed_Sword; 
      switch (example) 
      { 
       case EnumPlayerStances.One_Handed_Sword: 
        // do stuff 
        break; 
      } 
      Console.WriteLine($"Name: {enumName}, Value: {value}"); 
      Console.ReadKey(); 
     } 
    } 

    public enum EnumPlayerStances 
    { 
     One_Handed_Sword = 50 
    } 
} 

Beachten Sie, dass es als "enum" nicht "Klasse" deklariert ist.

Beachten Sie auch, dass, wenn Sie die Enum wie erklären:

public enum EnumPlayerStances 
{ 
    No_Sword, // 0 
    One_Handed_Sword, // 1 
    Two_Handed_Sword // 2 
} 

Der Wert des Vornamens beginnt bei 0 und autoincrements um 1 für jeden folgenden Namen.

+0

Ich glaube nicht, dass das irgendwas antwortet. Es * kann * als Enum deklariert werden, muss es aber nicht. Der Zugriff auf eine Konstante als 'EnumPlayerStances.OneHandSword' sollte funktionieren. Auch 'GetName' wird' OneHandSword' zurückgeben, im Gegensatz zu 'One handed Sword'. – GSerg

+1

Ich würde einen schlechten Dienst tun, um etwas anderes als das vorschlagen. Sicher kannst du mit dem Stoß eines Schraubenziehers einen Nagel einschlagen. Oder eine Klasse mit einem const-Feld als Enum. Aber wenn Sie Fachleute um Hilfe bitten, fragen Sie implizit "Was ist die beste oder zumindest vernünftige Praxis?". Und dann gibt es nur eine gute Antwort zu geben. Ein Hammer für Nägel und ein Enum für Aufzählungen. –

+0

Ich sehe nicht, welche Eigenschaft von enums sie erreichen würde, wenn eine Konstante nicht sein könnte. Sure enums ist eine bessere Art, bestimmte Arten von Konstanten zu organisieren, und Ratschläge zu ihrer Verwendung sollten gegeben werden, aber sie sind nicht besser, wenn es um Aspekte des Umfangs und der Zugänglichkeit geht, die der OP offensichtlich hat. Sie werden ein Enum anstelle der Konstante deklarieren und ihre Frage zu "C# kann Enum-Mitglieder nicht erreichen" ändern ... – GSerg