我们注意到了一些奇怪的东西,无法解释。在一个类中,我们有这两个函数:
如果我们尝试在VS2013中编译此项目,不会出现任何错误。如果我们尝试在VS 2010中编译完全相同的项目,则会出现以下错误(这是有道理的):
“Public Shared Overloads Function ToList(input As Object,[StringSeparator As String = ";"],[CharacterCasing As String = ""],[StartRow As Integer = 0],[EndRow As Integer = -1]) As String” 和“Public Shared Overloads Function ToList(Input As Object,[SplitStringSeparator As String = ","],[JoinStringSeparator As String= ","],[PreFixStr As String = ""],[PostFixStr As String = ""]) As String”不能重载彼此,因为它们只由可选参数的默认值的差异而不同。
“Public Shared Overloads Function ToList(input As Object,[StringSeparator As String = ";"],[CharacterCasing As String = ""],[StartRow As Integer = 0],[EndRow As Integer = -1]) As String” 和“Public Shared Overloads Function ToList(Input As Object,[SplitStringSeparator As String = ","],[JoinStringSeparator As String= ","],[PreFixStr As String = ""],[PostFixStr As String = ""]) As String”不能重载彼此,因为它们只由可选参数的类型差异而不同。
有人能解释一下,在不同版本的VS中打开相同解决方案包含相同项目时,为什么会有差异,有时会出现错误,有时不会吗?
def function1(list=[]):
list.append(1)
return list
def function2(list=[]):
list += [1]
return list
Public Overloads Shared Function ToList(ByVal input As Object, _
Optional ByVal StringSeparator As String = ";", _
Optional ByVal CharacterCasing As String = "", _
Optional ByVal StartRow As Integer = 0, _
Optional ByVal EndRow As Integer = -1) As String
...
End Sub
Public Overloads Shared Function ToList(ByVal Input As Object, _
Optional ByVal SplitStringSeparator As String = ",", _
Optional ByVal JoinStringSeparator As String = ",", _
Optional ByVal PreFixStr As String = "", _
Optional ByVal PostFixStr As String = "") As String
...
End Sub
如果我们尝试在VS2013中编译此项目,不会出现任何错误。如果我们尝试在VS 2010中编译完全相同的项目,则会出现以下错误(这是有道理的):
“Public Shared Overloads Function ToList(input As Object,[StringSeparator As String = ";"],[CharacterCasing As String = ""],[StartRow As Integer = 0],[EndRow As Integer = -1]) As String” 和“Public Shared Overloads Function ToList(Input As Object,[SplitStringSeparator As String = ","],[JoinStringSeparator As String= ","],[PreFixStr As String = ""],[PostFixStr As String = ""]) As String”不能重载彼此,因为它们只由可选参数的默认值的差异而不同。
“Public Shared Overloads Function ToList(input As Object,[StringSeparator As String = ";"],[CharacterCasing As String = ""],[StartRow As Integer = 0],[EndRow As Integer = -1]) As String” 和“Public Shared Overloads Function ToList(Input As Object,[SplitStringSeparator As String = ","],[JoinStringSeparator As String= ","],[PreFixStr As String = ""],[PostFixStr As String = ""]) As String”不能重载彼此,因为它们只由可选参数的类型差异而不同。
有人能解释一下,在不同版本的VS中打开相同解决方案包含相同项目时,为什么会有差异,有时会出现错误,有时不会吗?
ToList(blah)
,您将看到以下内容:“由于这些参数,重载分辨率失败,因为没有可访问的'ToList'最具体。”显然,只要确保每个特定的调用都是明确的,他们希望允许这种情况。但是,这仍然无法解释为什么此行为在VS2010和VS2013之间可能会有所不同... - mellamokbMSBuild
,则可以成功构建。因此,这似乎是仅存在于VS2010 IDE中的规则,在VS2013中已被删除。编辑:实际上,这只适用于安装了VS2010和VS2013的计算机。在仅安装了VS2010的计算机上,MSBuild会生成相同的两个错误。因此,看来安装VS2013包括一个更新的编译器,其与VS2010 IDE的行为不同! - mellamokb