我正在使用.NET 4.5,我想了解以下内容:
如果我执行此操作,一切都按预期工作:
Dim lst = Enumerable.Range(1, 10)
Dim lstOrdered = lst.OrderBy(Function(i) i Mod 2)
Dim lst2 = lstOrdered.ThenBy(Function(i) -i)
但是,以下内容会引发System.MissingMemberException
Dim lst = Enumerable.Range(1, 10)
Dim lstOrdered
lstOrdered = lst.OrderBy(Function(i) i Mod 2)
Dim lst2 = lstOrdered.ThenBy(Function(i) -i)
在实际代码中,我们必须动态应用OrderBy,有时甚至是OrderByDescending,然后动态地继续使用ThenBy和ThenByDescending。这就是为什么我想先宣布它。
另请注意,生产代码包含匿名对象而不是整数。
修改
以下代码更接近生产,我似乎无法适应所提供的答案。它编译但会抛出执行错误。
Dim lst = Enumerable.Range(1, 10).Select(Function(i) New With {.a = "foo", .b = i Mod 2, .c = -i})
Dim lstOrdered As IOrderedEnumerable(Of Object)
lstOrdered = lst.OrderBy(Function(i) i.b)
Dim lst2 = lstOrdered.ThenBy(Function(i) i.c)
错误是以下
Unable to cast object of type 'System.Linq.OrderedEnumerable`2[VB$AnonymousType_3`3[System.String,System.Int32,System.Int32],System.Int32]' to type 'System.Linq.IOrderedEnumerable`1[System.Object]'
答案 0 :(得分:3)
在第二个示例中,您没有为Dim lstOrdered As IOrderedEnumerable(Of Integer)
声明类型。如果您将第二行更改为
Option Strict On
设置Option Strict On
以在编译时捕获这些错误。您可以将语句{
"_id": "ACCEPT0",
"_rev": "1-92ea4e727271aefd0a2befed0d4bb736",
"OfferID": "OFFER0"
}
{
"_id": "ACCEPT1",
"_rev": "3-986ca6e717b225ac909d644de54d5f7d",
"OfferID": "OFFER3"
}
{
"_id": "OFFER0",
"_rev": "1-2af5f5c7b1c59dd3f0997f748a367cb2",
"From": "merchant1",
"To": "customer1"
}
{
"_id": "OFFER1",
"_rev": "6-f0927c5d4f9fd8a2d2b602f1c265d6d5",
"From": "merchant1",
"To": "customer2"
}
作为代码文件中的第一个,将该选项设置为Test | Options | Environment | Projects and Solutions | VB Defaults中的默认选项。