Ben*_*an 1 c# string casting list unity-game-engine
我正在 Unity 中做一个游戏,需要帮助将我的结构列表转换为字符串。我下面的代码放在一个名为 MonsterHandler 的类中。
public enum S_STATE
{
S_IDLE,
S_PATROL,
S_ATTACK,
NONE
}
public struct MONSTERS
{
public string Name;
public int Health;
public int Damage;
public S_STATE State;
};
public List<MONSTERS> monsterList= new List<MONSTERS>();
void Start()
{
// add data into the monsterList
// Debug.Log(monsterList.Count); // print out 5
Debug.Log(monsterList.ToArray()); //printed out "MonsterHandler + MONSTERS"
// i want to do something like this
// "Monster_Zombie, 100, 20, S_IDLE, Monster_Donkey, 80, 30, S_IDLE, Monster_Chicken, 120 , 10, IDLE,.."
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将我的结构列表转换为字符串 [],然后转换为字符串?或者还有其他方法
我首先重命名类型(和枚举值)以遵循 .NET 命名约定并指示该结构代表一个单一的怪物。不幸的是,IMO 可变结构在 Unity 中很常见,但我将把这部分放在一边。
我倒是旁边覆盖ToString()
在Monster
。假设您可以使用 C# 6 功能,字符串插值使这变得非常简单。
最后,要将怪物列表转换为字符串,您需要使用string.Join
. 调用的确切性质将取决于您可用的内容 - 如果您仍然针对 .NET 3.5,它会有点难看。但你最终会得到类似的东西:
public enum State
{
None, // Idiomatically value 0 in .NET
Idle,
Patrol,
Attack
}
public struct Monster
{
public string Name;
public int Health;
public int Damage;
public State State;
// Adjust this as required
public override string ToString() =>
$"Name: {Name}; Health: {Health}; Damage: {Damage}; State: {State}";
}
public List<Monster> monsters = new List<Monster>();
void Start()
{
Debug.Log(string.Join(", ", monsters.Select(m => m.ToString().ToArray());
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是一项昂贵的操作 - 您可能只想在调试时执行此操作。(我不知道Debug.Log
对 Unity 的调用是否有条件。)
在 .NET 4 及更高版本中,您可以使用
Debug.Log(string.Join(", ", monsters));
Run Code Online (Sandbox Code Playgroud)