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

有以下简单的代码:

Class A

    Private value As Integer = 1

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

End Class

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

Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.

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

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

Constant expression is required.

什么绝对有道理.

解决方法

经过进一步研究后,我认为编译器进行检查的顺序存在问题.

如果我更改代码,使值成员共享,我得到正确的结果:错误BC30059

Constant expression is required.

由于除了常量之外的任何内容都不能置于Optional子句的默认值中,因此检查上面的BC30059(“需要常量表达式”)应该明显比BC30369的检查“更早”(如图所示).

我创建了bug report at Microsoft Connect.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...