一个Roslyn的bug?在非共享成员上,我收到错误,我正在使用'共享成员初始化程序'

mir*_*lav 5 vb.net compiler-errors visual-studio roslyn visual-studio-2015

有以下简单的代码:

Class A

    Private value As Integer = 1

    Sub Action(Optional param1 As Integer = value)
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

Visual Studio抱怨默认值(value),错误BC30369:

如果没有类的显式实例,则无法在共享方法或共享成员初始值设定项中引用类的实例成员.

对于这种情况,这真的是错误的吗?该方法不共享.

在Visual Studio 2012或2013中,同一情况下的错误是

需要常量表达式.

什么绝对有道理.

mir*_*lav 2

经过额外的研究,我认为编译器的检查顺序存在问题。

如果我更改代码,创建valuemember Shared,我会得到正确的结果:Error BC30059

需要常量表达式。

由于除了常量之外,任何内容都不能放入Optional子句的默认值中,因此对上述BC30059(“需要常量表达式”)的检查显然应该比对BC30369(如问题所示)的检查“更早”。

在 Microsoft Connect 上创建了错误报告