我正在尝试将一些代码从 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()
但是,这是我不明白的第一部分。它似乎正在定义一些标签(或者可能是某种临时结构),它可以传递到下一个.Where()
子句。我尝试定义一个函数,在其中声明一些具有这些名称的变量,但我不知道如何声明它们:
.Select(Function(m, i)
Dim member = m
Dim positions As New Dictionary(Of Integer, Integer)(Resolver.GetPosition(m), i)
End Function)
类型应该是正确的(两个Integer
),但显然,尝试创建 aDictionary(Of Integer, Integer)
并不能让我进入下一个.Where()
或.OrderBy()
带有“名称”/标签的子句user
和builtin
传播。
我是否需要Private Structure
在类中创建/声明一个或某些可以在该查询中使用的东西?