在我们的应用程序中,我们有一些来自翻译的字符串可以包含变量。例如在Can i have a {beverage}?
该{beverage}
部分应替换为一个变量。我当前的实现通过拥有所有变量的名称和值的字典,并替换正确的字符串来工作。但是我想通过引用注册变量,这样如果值改变了,结果字符串也会改变。通常使用关键字传递参数ref
就可以了,但我不确定如何将它们存储在字典中。
翻译解析器:
static class TranslationParser
{
private const string regex = "{([a-z]+)}";
private static Dictionary<string, object> variables = new Dictionary<string,object>();
public static void RegisterVariable(string name, object value)
{
if (variables.ContainsKey(name))
variables[name] = value;
else
variables.Add(name, value);
}
public static string ParseText(string text)
{
return Regex.Replace(text, regex, match =>
{
string varName = match.Groups[1].Value;
if (variables.ContainsKey(varName))
return variables[varName].ToString();
else
return match.Value;
});
}
}
主文件
string bev = "cola";
TranslationParser.RegisterVariable("beverage", bev);
//Expected: "Can i have a cola?"
Console.WriteLine(TranslationParser.ParseText("Can i have a {beverage}?"));
bev = "fanta";
//Expected: "Can i have a fanta?"
Console.WriteLine(TranslationParser.ParseText("Can i have a {beverage}?"));
这有可能吗,还是我只是错误地解决了这个问题?我担心唯一的解决方案会涉及不安全的代码(指针)。
所以简而言之,我想在字典中存储一个变量,更改原始变量并从字典中获取更改后的值。就像您对ref
关键字所做的那样。