【问题标题】:Enumerable.Max with a selector lambda function带有选择器 lambda 函数的 Enumerable.Max
【发布时间】:2012-12-07 16:29:51
【问题描述】:

我有一个Column 自定义类对象的列表。

Column 类有一个 Position 属性。

列表中的每一列都有不同的位置(目前是1、2、3、4)

我想通过Position 属性上的Max 找到最右边的列:

Enumerable.Max(Of ExcelColumn)(Me.Columns, Function(c) c.Position)

Me.Columns.Max(Function(c) c.Position)

两者总是返回0,不明白为什么。有什么想法吗?

【问题讨论】:

    标签: vb.net lambda ienumerable


    【解决方案1】:

    例如:

    Class Column
        Public Property Position As Int32
    End Class
    
    Dim columns As New List(Of Column) From {
        New Column With {.Position = 1}, New Column With {.Position = 2}, New Column With {.Position = 3}, New Column With {.Position = 4}
    }
    Dim maxColPos As Int32 = columns.Max(Function(c) c.Position)
    
    Console.Write(maxColPos) ' will output 4
    

    顺便说一句,这将返回重复的零,因此maxColPos=0

    Dim columns As New List(Of Column) From {
        New Column, New Column, New Column, New Column
    }
    

    因为 0 是未初始化的 Int32 字段的 default value

    【讨论】:

    • Dim maxCol As Int32 是暗示的。由于某些未公开的原因,它总是返回 0。我在运行时检查了position s,它们是正确的。
    • @Teejay:如果未初始化,则返回 0,因为这是默认值。如果我省略上面的{.Position = 1} 部分,我也会得到重复的零。
    • 我太笨了!!!在Get 语句中忘记了ReturnPublic ReadOnly Property RightMostCol As Int32 Get Me.Columns.Max(Function(c) c.Position) End Get End Property
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2015-02-04
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多