3
我使用.NET 4.5,我想了解以下信息:为什么ThenBy在下列情况下引发异常?
如果我执行这个一切正常:
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]'
如果不是'Integer',我有匿名对象呢? –
@AsierAzkuenaga你可以随时做我做过的事情。按照第一个示例编写代码,然后将鼠标悬停在第二条语句的'lstOrderered'上,并让IDE告诉您为该变量推断了哪种类型。这是'Dim'语句中使用的类型。 – Blackwood
如何声明'OrderedEnumerable(Of VB $ AnonymousType_3(Of Object,Object),Object)'虽然? –