C#不能达到枚举类变量

问题描述:

我已经创建了下面的类:C#不能达到枚举类变量

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" 
      }; 
    } 
} 

现在,我想在我的下面的类来使用:

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; 
     } 

    } 
} 

但是Visual Studio中说,它的一个错误。

对于C#来说我相当新,所以我希望你们能够帮助我? :)

+0

什么类型是“mActorController.State.Stance”?您将它与EnumPlayerStances类的const int进行比较。看起来这个类可以被重构为更友好的用户界面。价值50代表什么?你期望把什么其他的东西放在字符串数组中? – Vidar

你击败了枚举的点。它应该这样声明和使用:

using System; 

namespace *_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 
    } 
} 

请注意,它被声明为“枚举”而不是“类”。

还要注意,如果你声明的枚举,如:1为每个下列名称

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

第一name的值从0开始并自动递增。

+0

我不认为这有什么答案。它*可以被声明为一个枚举,但它不必。像EnumPlayerStances.OneHandSword一样访问一个常量应该可以正常工作。另外'GetName'将返回'OneHandSword',而不是'单手剑'。 – GSerg

+1

我会做一些破坏建议以外的东西。当然,你可以使用螺丝刀的屁股敲击指甲。或者是一个带const字段的类作为枚举。但是,当你向专业人员求助时,你隐含地问“什么是最好的,或者至少是合理的,实践”。然后,只有一个好的答案给。钉子的锤子,枚举枚举。 –

+0

我不明白当一个常数不可能时,枚举的属性会让他们达到什么样的属性。当然,枚举是组织某些类型的常量的更好方法,应该给出关于使用它们的建议,但是当涉及到OP显然具有的范围/可访问性问题时,它们并不会更好。他们将声明一个枚举而不是常量,并将他们的问题改为“C#无法到达枚举成员”... – GSerg