用功能代替字典

时间:2019-03-29 07:38:07

标签: c#

我正在制作具有角色属性(例如力量,敏捷性等)的游戏。我将它们全部放在<string, double>词典中。我需要对装备,buff等的属性实施“ mods”。我想通过查找/替换将"CurrentStats[Key]"的所有实例替换为某种function(string input)。 (我有成百上千的引用,我不能全部手工完成)

所以基本上,我正在寻找一种写函数的方法,我可以用某种方式写

Function("Strength") = 5;进行分配

同时仍然可以使用

if(Function("Strength") == 5)用于获取。

这可能吗?

3 个答案:

答案 0 :(得分:1)

Visual Studio在其搜索和替换中内置了正则表达式。您只需在进行替换时启用该选项即可。

您可能只需执行全局搜索,然后将CurrentStats\[([^\]]+)\]替换为MyFunction($1)

说明:这将搜索文字字符串CurrentStats[],两个方括号之间的内容是一个组(在替换中称为$1),表示为用{{1}包围}和(,其中包含),或者,“一个字符组(不是结尾引号[^\]]+的任何字符重复了一次或多次)。

请注意,如果键本身可以包含]之类的键,则此键将无效,因为它显然将与该键的右括号匹配。正则表达式并不是非常擅长匹配括号或标签。

答案 1 :(得分:0)

地方策略是为您的角色设置一个类。您可以使用属性。如果要分配功能,通常使用参数调用函数,但是可以直接分配属性。

public class Character {
    private bool overpowered = false;
    private int _strength = 0;
    public int Strength
    {
        get { return this._strength; }
        set {
            if (value > 10) { overpowered = true; }
            this._strength = value;
        }
    }
    // [...]
}

然后使用属性通过对象简单地访问它:

Character c = new Character();
c.Strength = 5;
if (c.Strength == 5) { /* ... */ }

在这里使用字典毫无意义。

答案 2 :(得分:0)

看起来ref返回是我的追求。我不知道如何将其标记为已回答。在这里的第一篇文章。谢谢大家