C#如何将结构类型列表转换为字符串?
问题描述:
我在Unity中做游戏,需要将我的结构列表转换为字符串。我的代码放在一个名为MonsterHandler的类中。C#如何将结构类型列表转换为字符串?
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,.."
}
}
有没有办法把我的结构列表转换成字符串[],然后转换成字符串?或者有任何其他方式
答
您可以覆盖怪物ToString
,但如果你想灵活性如何得到的东西显示在不同的情况下,那么我让你如何呈现的东西从模型
Debug.Log(string.Join("\r\n",
monsterList.Select(monster => $"{monster.Name}, {monster.Health}, whatever")
.ToArray()));
使用控制台分开......
Console.WriteLine(string.Join("\r\n",monsterList.Select(monster => $"{monster.Name} {monster.Health} {monster.Damage} {monster.State}").ToArray()));
答
我首先重命名类型(和枚举值)遵循.NET命名约定,并指出该结构代表一个单个怪物。 不幸的是,可变结构在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());
}
请注意,这是一个昂贵的操作 - 您可能只想在调试时执行此操作。 (我不知道Debug.Log
电话是否统一是有条件的。)
在.NET 4及以上,你可以只使用
Debug.Log(string.Join(", ", monsters));
你想印什么? –
@KeithNicholas我想打印出这样的东西 – Benjan
“Monster_Zombie,100,20,S_IDLE,Monster_Donkey,80,30,S_IDLE,Monster_Chicken,120,10,IDLE,..” – Benjan