比方说,我有一个对象MyCharacter
类Character
,它具有以下特性:Health
,Mana
,MoveSpeed
。
从另一种方法中,我得到一个包含这些统计信息的字符串,如下所示:
"Health: 100 Mana: 100 MoveSpeed: 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;
}
}
现在,我知道统计信息的顺序。永远是生命值,然后是法力值,然后是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];
您还可以为此使用一个正则表达式,这样做的好处是可以进一步验证您的模式(因此,如果存在与格式不匹配的情况,则会出现异常):
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()
每个值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句