私は、.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を使用して動的に続行する必要があります。それが私が最初に宣言したい理由です。
また、プロダクションコードには整数ではなく匿名のオブジェクトが含まれています。
EDIT
次のコード、それは生産に近いだと私は答え提供への適応を管理していないようです。それはコンパイルされますが、実行エラーがスローされます。
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)
エラーがあなたの2番目の例では、次の
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]'
「整数」の代わりに匿名オブジェクトがあるとしたらどうなりますか? –
@AsierAzkuenagaあなたはいつも私がやったことをすることができます。あなたの最初の例のようにコードを書いてから、2番目のステートメントの 'lstOrderered'にカーソルを置いて、IDEがその変数についてどのような型を推測したかを教えてください。これは 'Dim'ステートメントで使用する型です。 – Blackwood
'OrderedEnumerable(Of VB $ AnonymousType_3(Of Object、Object)、Object)'を宣言する方法はありますか? –