我正在尝试将一些代码从C#转换为VB.NET,这些代码正在寻找一组特定的类成员,除了一个使用了一些我不熟悉的C#语法的LINQ查询外,我几乎已经完全解决了:
var members = entityType.GetTypeInfo().GetMembers(bindingFlags)
.Where(m => m.MemberType == MemberTypes.Property || m.MemberType == MemberTypes.Field)
.Select((m, i) => (member: m, positions: (user: resolver.GetPosition(m), builtin: i)))
.Where(x => x.positions.user != -1)
.OrderBy(x => x.positions)
.Select(x => x.member)
.ToArray();
第一个
.Where()
位有意义并转换为:
.Where(Function(m) m.MemberType = MemberTypes.Property Or m.MemberType = MemberTypes.Field)
但是,这是第一次
.Select()
我不明白的部分。它似乎在定义一些标签(或者可能是某种临时结构),可以传递给下一个
哪里
条款我试图定义一个函数,用这些名称声明一些变量,但我不知道如何声明它们:
.Select(Function(m, i)
Dim member = m
Dim positions As New Dictionary(Of Integer, Integer)(Resolver.GetPosition(m), i)
End Function)
类型应正确(两者
Integer
s) ,但显然只是试图创建
Dictionary(Of Integer, Integer)
不能让我进入下一个
哪里
或者
.OrderBy()
带有“名称”/标签的子句
user
和
builtin
推进。
我是否需要创建/声明
Private Structure
或者类中我可以在该查询中使用的东西?