VB.NET中Linq/lambdas的混淆

本文关键字:lambdas NET Linq VB | 更新日期: 2023-09-27 17:59:01

我有一个DTO Department的集合,并且只想为所有Department对象提取其中一列。我知道在C#中你可以这样做:

List<Department> departments = corporation.GetDepartments();
List<int> departmentIDs = departments.ConvertAll(dep => dep.ID);

根据我的理解,这是使用LINQ,ConvertAll()的参数是lambda表达式。(?)

当试图在VB中实现同样的功能时,似乎必须定义一个Converter方法:

Dim departmentIDs As List(Of Integer) = coll.ConvertAll(New Converter(Of Department, Integer)(AddressOf ConvertDepartmentToInt))
Public Shared Function ConvertDepartmentToInt(ByVal dep As Department) As Integer
    Return dep.ID
End Function

为什么是这样?我是不是错过了什么?

VB.NET中Linq/lambdas的混淆

您也可以在Visual Basic.NET中使用lambdas。语法如下:

departments.ConvertAll(Function(dep) dep.ID)

对于不返回值的lambda(如Action<int>类型的lambda),请改用Sub

Sub(x) Console.WriteLine(x)