【问题标题】:Using string as integer name for functions使用字符串作为函数的整数名称
【发布时间】:2019-11-23 06:25:22
【问题描述】:

我目前正在使用 Unity C# 开发一个角色项目系统,该系统为一个游戏项目提供永久加电。正如我们现在所拥有的,通电状态是用整数设置的(0 表示未获得,1 表示未激活,2 表示激活,因为我们希望玩家能够禁用它们。) 作为一种简化通电代码并且不需要为每个项目编写大量脚本的方法,我考虑在项目脚本上设置一个公共 String 变量,我们可以在其中输入整数的列表名称,并在获得时找到其整数name 匹配字符串文本,并从那里开始工作。 不幸的是,我似乎无法弄清楚这是如何工作的,或者甚至无法弄清楚。任何帮助,无论是执行此操作的功能还是查看位置,甚至确认这是不可能的,都将不胜感激

【问题讨论】:

    标签: c# string unity3d variables integer


    【解决方案1】:

    Rufus L 是正确的,因为您首先应该使用枚举,但是如果您出于某种原因绝对必须将字符串映射到整数,那么 [Dictionary]1 就可以了你需要什么。字典会将输入值“映射”到输出值,因此在您的情况下,您可以将字符串映射到整数。

    例如,您可以像这样设置字典(在一个类中);现在每个字符串都与一个整数值相关联。

    Dictionary<string, int> NameToStatus = new Dictionary<string, int>() {
      { "Unobtained", 0 },
      { "Inactive", 1 },
      { "Active", 2 }
    }
    

    然后你可以用它来获取一些函数中的整数值。

    int GetItemStatus(string status)
    {
      int res = NameToStatus[status];
      return res;
    }
    

    这可行,但重申一下,使用 Rufus L 在他的回答中建议的枚举是最佳解决方案,并且如果可能的话,您应该努力争取的设计。

    【讨论】:

      【解决方案2】:

      听起来您在描述enum,它基本上是一组相关的命名整数。当声明如下时,第一项获得默认值0,并且每个后续名称的值都比前一个大一个。如果您愿意,您也可以为它们分配特定的值,但通常不使用值本身,只使用名称。

      类似:

      public enum PowerUpStatus { Unobtained, Inactive, Active }
      
      public class Character
      {
          // Create property for powerup status and set the default value to unobtained
          public PowerUpStatus PowerUpStatus { get; set; } = PowerUpStatus.Unobtained;
      
          // rest of Character implementation omitted
      }
      

      示例用法:

      class Program
      {      
          public static void Main()
          {
              var character = new Character();
      
              // Change character's powerup status
              character.PowerUpStatus = PowerUpStatus.Active;
          }
      }
      

      如果需要,您也可以通过简单地将值转换为 int 来获取整数值:

      int powerUpValue = (int) character.PowerUpStatus;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 2018-12-03
        相关资源
        最近更新 更多