2017-05-18 65 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」

注:30z可有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作爲格式字符串,即使它是動態的,因爲其餘的參數是一個參數數組,你甚至可以做這樣的事情(儘管它是圍繞着不必要的包裝已經使用的方法):

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

的問題是,在Z字符串值是不是在設計時已知和{}的數量也是不知道的,所以我在尋找一種方法在運行時,以評估這一點。 – George

+0

@George I更新了我的答案,證明它即使在動態值下也能正常工作。 –

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 
+0

與此相關的問題是在設計時我不知道{}有多少個變量名稱。我所知道的是z和z可以在運行時改變。 – George

+0

@George你需要傳入_all possible_變量,你應該在設計時知道這些變量。我不知道任何可以傳入當前範圍的方式,包括局部變量,雖然「Smart.Format」的參數可能是「Me」,它可以讓你引用任何在類級定義的公共變量。 – Mark