3

次のテンプレートがあるとします。

こんにちは{{名前}}!{{ ブログ }} へようこそ。最終ログイン日: {{ date }}。

ユーザーはテンプレートとプレースホルダー/変数の両方を入力できるため、プレースホルダーがどのようになるかを知る方法はありません。

私は次のようなものを作成することを考えていました:

public string Render(string text, Dictionary<string,string> placeholders)
{
    Template template = Template.Parse(text);
    return template.Render(Hash.FromSomething(placeholders));
}

Dictionary を受け入れる FromDictionary というメソッドがありますが、その仕組みがよくわかりません。他の代替手段は FromAnonymousObject ですが、目的に合わせて Dictionary を匿名オブジェクトに変換する方法がわかりません。

どんなアイデアでも大歓迎です!

4

1 に答える 1

5

Hash.FromDictionary本当にあなたが望む方法です。あなたは答えに非常に近かったと思います - に変換するだけDictionary<string, string>ですDictionary<string, object>。(値はobject、プリミティブ型に加えて、ネストされたオブジェクトをそこに含めることができるためです。)

public string Render(string text, Dictionary<string,string> placeholders)
{
    Template template = Template.Parse(text);
    Dictionary<string, object> convertedPlaceholders =
        placeholders.ToDictionary(kvp => kvp.Key, kvp => (object) kvp.Value);
    return template.Render(Hash.FromDictionary(convertedPlaceholders));
}

(これをコンパイルせずにSOに入力したので、間違いがあればお詫びします。お知らせください。回答を更新します。)

于 2015-01-12T10:27:30.790 に答える