gpt4 book ai didi

vb.net - 为什么 thenBy 在以下情况下会引发异常?

转载 作者:行者123 更新时间:2023-12-02 08:06:04 26 4
gpt4 key购买 nike

我正在使用 .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]'  

最佳答案

在第二个示例中,您没有声明 lstOrdered 的类型。如果将第二行更改为

应该可以工作
Dim lstOrdered As IOrderedEnumerable(Of Integer)

设置Option Strict On以在编译时捕获这些错误。您可以将 Option Strict On 语句设置为代码文件中的第一个语句,并在“测试|选项|环境|项目和解决方案|VB 默认值”中将该选项设置为默认值。

关于vb.net - 为什么 thenBy 在以下情况下会引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com