2017-04-08 3 views
2

文字列のテンプレートを変数に格納して補間することはできますか?C言語の変数コンテンツを使用した文字列補間

var name = "Joe"; 
var template = "Hi {name}"; 

私はその後のような何かをしたい:理由は私のテンプレートがデータベースから来るある

var result = $template; 

+3

あなたが尋ねていることは明確ではありません。あなたはどの値がデータベースから来ているのか、あなたの期待される出力は何かを明確にすることができますか? –

答えて

1

いいえ、それは文字列が作成される時刻(コンパイル時)にnameの値が必要なため、できません。代わりにString.FormatまたはString.Replaceを使用することを検討してください。

3

これらの文字列は、変更可能であっても、常に同じ数のパラメータを持つと思います。たとえば、今日template"Hi {name}"であり、明日は"Hello {name}"となる可能性があります。

短い回答:いいえ、あなたが提案したことはできません。

代替方法1:string.Formatメソッドを使用します。

あなたのデータベースにこのような何か保存することができます:あなたはデシベルから文字列テンプレートを取得するとき、あなたが書くことができ、その後

"Hi {0}" 

を:

:2つのパラメータで

var template = "Hi {0}"; //retrieved from db 
var name = "Joe"; 
var result = string.Format(template, name); 
//now result is "Hi Joe" 

var name2a = "Mike"; 
var name2b = "John"; 
var template2 = "Hi {0} and {1}!"; //retrieved from db 
var result2 = string.Format(template2, name2a, name2b); 
//now result2 is "Hi Mike and John!" 

代替手段2:plac eholder。

あなたのデータベースにこのような何か保存することができます:あなたはデシベルから文字列テンプレートを取得するとき、あなたが書くことができ、その後

"Hi {name}" 

を:

:3つのパラメータで

var template = "Hi {name}"; //retrieved from db 
var name = "Joe"; 
var result = template.Replace("{name}", name); 
//now result is "Hi Joe" 

var name2a = "Mike"; 
var name2b = "John"; 
var template2 = "Hi {name2a} and {name2b}!"; //retrieved from db 
var result2 = template2 
    .Replace("{name2a}", name2a) 
    .Replace("{name2b}", name2b); 
//now result2 is "Hi Mike and John!" 

プレースホルダにはどのトークンを選択するか注意してください。ここでは中括弧を囲んで使用した{}。他のテキストとの衝突を起こす可能性の低いものを見つけるべきです。そしてそれはあなたの文脈に完全に依存します。

+0

答えをありがとう。私はstring.Formatを長年使用していましたが、文字列補間はコードをもっと読みやすくしました。私はそれがstring.Formatとしてテンプレート変数で動作することを期待していた実際には醜いとエラーが発生する可能性が高い20の変数を取得します。私はおそらくstring.In各変数を置き換え、テンプレートのプレースホルダを自分自身に置き換えて行くだろう。 –

+0

@ TonyLugg string.Formatではなくstring.Replaceを使用する利点は何ですか?どのように使用するのですか、私はそれについて興味があります。 –

+0

遅く返事を申し訳ありません。私は非常に大きな文書で置き換えなければならない多くの変数を持っています。文字列を使用します。書式は本当に読みにくく、エラーが発生しやすい(順序はソース文字列内の{#}インスタンスと一致する必要があります)どの変数がどの置換文字列で置き換えられるかを自己文書に置き換えてください –

関連する問題