有了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 可以使用类似的表示法。
任何帮助将不胜感激。
我想你在谈论IEnumerable(Of T(。选择功能。可用于将一种类型的集合映射到另一种类型的集合。
Dim combinedNames As String = String.Join(" ", myList.Select(Function(item) item.Name))
所以相当于 python 在 vb.net 中的{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)
类型。
代码的 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)
相同。 这取决于您使用哪种语法的偏好。