比方说,我有一个对象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;
    }
}
现在的事情是,我知道统计数据的顺序.它总是健康,然后是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];
您还可以使用正则表达式,这样可以进一步验证您的模式(因此,如果存在与您的格式不匹配的情况,则会出现异常):
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()每个值.