假设我有一个 Character
类的对象 MyCharacter
,它具有以下属性:Health
、Mana
,移动速度
。
从不同的方法我得到一个包含这些统计数据的字符串,如下所示:
“健康:100 法力:100 移动速度:100”
我现在想将这些统计信息分配给我的对象。我目前的尝试是这样的:
// stats is the string I showed above
var statsArray = stats.Split(' ');
for (var i = 0; i < statsArray.Length; i++)
{
switch(statsArray[i])
{
default:
break;
case "Health:":
MyCharacter.Health = statsArray[i+1];
break;
case "Mana:":
MyCharacter.Mana = statsArray[i+1];
break;
case "MoveSpeed:":
MyCharacter.MoveSpeed = statsArray[i+1];
break;
}
}
现在的问题是,我知道统计数据的顺序。始终是 Health,然后是 Mana,然后是 MoveSpeed。所以我正在寻找一种简化它的方法,即摆脱这个 switch
(因为这里的实际 Character
有 18 个统计数据,而且看起来并不完全好看) .
我的想法是遍历数组并告诉程序将它找到的第一个数字分配给 Health,第二个分配给 Mana,第三个分配给 MoveSpeed。
这样的事情有可能吗?
最佳答案
因为您知道确切的格式,所以您可以直接访问索引:
string stats = "Health: 100 Mana: 100 MoveSpeed: 100";
var statsArray = stats.Split(' ');
MyCharacter.Health = statsArray[1];
MyCharacter.Mana = statsArray[3];
MyCharacter.MoveSpeed = statsArray[5];
您也可以为此使用正则表达式,它的好处是可以进一步验证您的模式(因此,如果有一种情况不匹配您的格式,您会得到一个异常(exception)):
var m = Regex.Match(stats, @"Health: (\d+) Mana: (\d+) MoveSpeed: (\d+)");
MyCharacter.Health = m.Groups[1].Value;
MyCharacter.Mana = m.Groups[2].Value;
MyCharacter.MoveSpeed = m.Groups[3].Value;
注意:您可能希望这些属性包含整数,以便您可以使用这些值进行计算,因此您应该对每个值调用 int.Parse()
。
关于c# - 在for循环中为对象赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732311/