2017-08-18 76 views
2

隨着蟒蛇背景生成對象屬性的列表,我已經變得相當習慣用線條狀從預先存在的列表VB.Net

print(" ".join({x.name for x in my_list})) 

其中

{x.name for x in my_list} 

是包含my_list中每個對象的name屬性的list/array。

我希望做在VB.Net類似的東西,我知道這是可能使用的代碼一樣一長段:

Dim str1 = "" 
For each item in myList 
    str1 &= item.name & " " 
Next 

但我更喜歡一個更簡單的解決方案,我會做這個很多,我聽說有類似的符號可能使用LINQ。

任何幫助,將不勝感激。

回答

1

我想你說的是IEnumerable(Of T).Select函數。您可以使用它將一個類型的集合映射到另一個類型的集合。

Dim combinedNames As String = String.Join(" ", myList.Select(Function(item) item.Name)) 

所以相當於對Python的{x.name for x in my_list}在vb.net將

Dim names = myList.Select(Function(item) item.Name) 

Dim builder = new StringBuilder() 
For Each name in names 
    builder.Append(name) 
    builder.Append(" ") 
Next 

Dim allNames = builder.ToString() 

注意Select函數返回IEnumerable(Of T)類型。

1

的VB.NET相當於你的代碼是:

Debug.Print(String.Join(" ", From x In my_list Select x.Name)) 

的「查詢綜合」形式From x In my_list Select x.Name編譯時是相同的擴展功能形式my_list.Select(Function(x) x.Name)。這取決於您使用的語法。

+0

只是爲了澄清,在擴展函數調用中查詢「已翻譯」,然後它將被編譯。 – Fabio