2017-05-18 22 views
0

と仮定すると、次...評価文字列(補間)

Dim x as string = "hello" 

dim y as string = "world" 

dim z as string = "{x} {y}" 'Note: no $ (not interpolation) 

私は、zを渡すときに戻ってくるというメソッドを呼び出すしたいと思い、「Hello World」の

注:zは0を持つことができます以上{}であり、呼び出し元のスコープに基づいて評価する必要があります

これは可能ですか?

答えて

1

文字列の補間は、次の手順を実行し、文字列を補間するにはVB.NET 14に提供されています...

Dim x as string = "hello" 
Dim y as string = "world" 

Dim z = $"{x} {y}" 

これは、の詳細については...

dim z = String.Format({0}{1}, x,y) 

の省略形ですVB.NET 14、14 Top Improvements in Visual Basic 14

0

String.Formatを使用すると、プレースホルダに文字の代わりに数字を使用すると、

Dim x As String = "hello" 
Dim y As String = "world" 
Dim z As String = "{0} {1}" 
Dim output As String = String.Format(z, x, y) 

任意の文字列は、それがダイナミックだ場合でも、フォーマット文字列としてString.Formatに渡すことができ、そして残りのパラメータはPARAM配列されているので、それは周りの不要なラッパーだけれども、あなたも(このような何かを行うことができますので、すでに使用可能な方法):

Public Function MyFormat(format As String, values() As Object) As String 
    Return String.Format(format, values) 
End Function 
+0

問題は、zの文字列値は、設計時に知られていないと{}の数も知られていないので、私は、実行時にこれを評価するための方法を探していますということです。 – George

+0

@Georgeダイナミックな値でも機能することを示すために私の答えを更新しました。 –

0

named placeholdersSmartFormat.NETのような何かが、あなたが探しているものかもしれません。可能なすべてのコンテキスト変数を渡す必要があります。現在のスコープを取得する方法はわかりません。

Dim x As String = "hello" 
Dim y As String = "world" 
Dim notUsed As String = "Don't care" 
Dim z As String = "{x} {y}" 
Dim output As String = Smart.Format(z, New With { x, y, notUsed }) 
Console.WriteLine(output) 
 
hello world 
+0

これは設計時に、{}の変数名と変数名が分かりません。私が知っているのはすべてzです。zは実行時に変更できます。 – George

+0

@ Georgeあなたは_可能な_変数を渡す必要があります。これは設計時に知っておくべきです。 'Smart.Format'のパラメータは' Me'であるかもしれませんが、ローカル変数を含む現在のスコープで渡すことができる方法はわかりません。クラスレベルで定義されたすべてのパブリック変数を参照できます。 – Mark