c# - 在for循环中为对象赋值

标签 c# loops oop

假设我有一个 Character 类的对象 MyCharacter,它具有以下属性:HealthMana移动速度
从不同的方法我得到一个包含这些统计数据的字符串,如下所示:
“健康: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/

相关文章:

c# - 按句点将字符串格式化为 3 位数字组

c - 带循环的 C 程序中的老虎机

c - 如何在 header 中构造函数,在源代码中定义

c - 在 C 编程中动态填充数组

java - 在文件的最后以数字增量保存文件

class - 在 MVC 中,View 的标准职责是什么?

java - JPA 中的 "circular references"是反模式吗?

c# - MIDI 入门

c# - 如何将列表中的每个元素除以一个整数? C#

c# - 如何在C#中将我的线程(用户定义的线程)置于 sleep 模式?