从预先存在的列表VB.Net生成对象属性列表

时间:2017-08-18 04:27:11

标签: python vb.net linq

使用python背景,我已经习惯于使用像

这样的行
print(" ".join({x.name for x in my_list}))

,其中

{x.name for x in my_list}

是一个列表/数组,包含my_list中每个对象的name属性。

我希望在VB.Net中做类似的事情,我知道这可以使用更长的代码部分,如:

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

但我更喜欢一个更简单的解决方案,因为我会做很多事情,而且我听说使用LINQ也有类似的符号。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我想你在谈论IEnumerable(Of T).Select功能。您可以将其用于将一种类型的集合映射到另一种类型的集合。

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

vb.net中python的{x.name for x in my_list}的等价物将是

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 :(得分: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)相同。这取决于您的偏好,使用哪种语法。