Linq语句:内部函数调用与封闭方法名

时间:2015-07-21 18:39:27

标签: vb.net linq

隐秘的标题,但我会从提出问题的代码开始,然后澄清:

Public ReadOnly Property Max As Double
    Get
        Dim res = (From a As Double() In Values Select a.Max).Max
        Return res
    End Get
End Property

Values是一个双重的锯齿状数组,

Private Values()() As Double

在其他地方初始化。我想使用Linq来提取整体最大值。 上面的代码为第一个.Max提供了以下例外:

  

BC30978范围变量' Max'将变量隐藏在封闭块中或   先前在查询中定义的范围变量   表达

如果我将属性名称更改为GetMaximum之类的其他内容,则错误消失。

为什么我不能为从{jagged数组中选择的.Max变量Double()调用a函数?这个电话有什么用它所用方法的名称做什么呢?

我在Windows 8.1上使用Visual Studio Community 2015。 VB.NET或C#中的答案都非常受欢迎。

变通方法

作为一种解决方法,我可以举例如下:

Private Function GetMax(a As Double()) As Double
    Return a.Max
End Function
Public ReadOnly Property Max As Double
    Get
        Dim res = (From a As Double() In mvalues Select GetMax(a)).Max
        Return res
    End Get
End Property

没有错误,所以只有内部.Max负责错误。

如前所述,这也有效:

Public ReadOnly Property GetMax As Double
    Get
        Dim res = (From a As Double() In Values Select a.Max).Max
        Return res
    End Get
End Property

因此,第一个.Max和属性名称之间存在冲突。

1 个答案:

答案 0 :(得分:0)

我无法解释为什么你做错了。正如您所指出的那样,我怀疑选择“Max”的范围确实与属性名称冲突。也许其他人可以参与解释。

无论哪种方式,这似乎都可以作为替代方案:

Public ReadOnly Property Max As Double
    Get
        Return Values.Max(Function(a) a.Max)
    End Get
End Property