代码中的Eval字符串(插值)

时间:2017-05-18 14:06:21

标签: vb.net

假设以下......

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或更多{},并且应该根据调用者的范围进行评估

这可能吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

SmartFormat.NET这样的named placeholders可能就是你要找的东西。您需要传递所有可能的上下文变量 - 我不知道有什么方法可以捕获当前范围。

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