在我們的應用程序中,我們有一些來自翻譯的字符串可以包含變量。例如在Can i have a {beverage}?
中{beverage}
部分應該用變量替換。 我的當前實現通過使用所有變量的名稱和值的字典,並只替換正確的字符串。不過,我想通過引用來註冊變量,以便如果值被更改,結果字符串也會被更改。通常傳遞一個帶有ref
關鍵字的參數可以做到這一點,但我不確定如何將這些參數存儲在字典中。參考字典值
TranslationParser:
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;
});
}
}
main.cs
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
關鍵字一樣。
http://en.wikipedia.org/wiki/Rope_(computer_science)可能會感興趣。 – 2012-04-27 11:51:06
@DaveBish你是一個快速讀者!但那篇文章似乎是關於存儲,這不是一個問題。這些字符串來自xml文件,並且不包含在二進制文件中。 – TJHeuvel 2012-04-27 11:52:27
和字符串操作似乎很好,我只是想基本上存儲在字典中的參考。 – TJHeuvel 2012-04-27 11:55:44