用函数替换字典

问题描述 投票:-2回答:3

我正在制作一个具有角色属性的游戏,比如力量,敏捷等等。我把它们都放在<string, double>词典中。我需要对来自设备,增益等的属性实现“mods”。我想通过查找/替换将"CurrentStats[Key]"的所有实例替换为某种类型的function(string input)。 (我有几百个参考资料,我不能手工完成)

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

Function("Strength") = 5;的任务

虽然仍然可以使用

if(Function("Strength") == 5)取物。

这可能吗?

c#
3个回答
1
投票

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

您可以只执行全局搜索并将CurrentStats\[([^\]]+)\]替换为MyFunction($1)

说明:这将搜索文字字符串CurrentStats[],两个括号之间的内容是一个组(在替换中引用为$1),由()包围,包含[^\]]+,或“,任何字符组这不是关闭报价],重复一次或多次“。

请注意,如果密钥本身可能包含myArray[i]之类的东西,那么这将无效。从那以后它显然会匹配那个的结束括号。正则表达式并不擅长匹配括号或标签。


0
投票

locigcal方法是为你的角色设一个班级。您可以使用属性。如果要分配某些内容,通常会使用参数调用函数,但可以直接分配属性。

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) { /* ... */ }

使用字典在这里没什么意义。


0
投票

看起来ref返回是我追求的。我不知道如何将其标记为已回答。首先发布在这里。感谢大家

© www.soinside.com 2019 - 2024. All rights reserved.