罗斯林错误?在非共享成员上,我在使用 'shared member initializer' 时遇到错误
A Roslyn bug? On non-shared member, I'm getting error that I'm using 'shared member initializer'
有以下简单代码:
Class A
Private value As Integer = 1
Sub Action(Optional param1 As Integer = value)
End Sub
End Class
Visual Studio 抱怨默认值 (value
) 错误 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 Studio2012年或2013年,同例错误为
Constant expression is required.
绝对有道理。
经过进一步研究,我认为编译器的检查顺序存在问题。
如果我更改代码,使 value
成为成员 Shared
,我会得到正确的结果:错误 BC30059
Constant expression is required.
因为除了常量之外什么都不能放入 可选 子句的默认值,检查上面的 BC30059 ("Constant expression is required." ) 显然应该 "earlier" 而不是 BC30369 的检查(有问题)。
有以下简单代码:
Class A
Private value As Integer = 1
Sub Action(Optional param1 As Integer = value)
End Sub
End Class
Visual Studio 抱怨默认值 (value
) 错误 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 Studio2012年或2013年,同例错误为
Constant expression is required.
绝对有道理。
经过进一步研究,我认为编译器的检查顺序存在问题。
如果我更改代码,使 value
成为成员 Shared
,我会得到正确的结果:错误 BC30059
Constant expression is required.
因为除了常量之外什么都不能放入 可选 子句的默认值,检查上面的 BC30059 ("Constant expression is required." ) 显然应该 "earlier" 而不是 BC30369 的检查(有问题)。