【问题标题】: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;