私たちのアプリケーションでは、変数を含むことができる翻訳からの文字列がいくつかあります。たとえば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
キーワードで行うように。