Vb.net 允许/不允许缩小转换

Vb.net 允许/不允许缩小转换,vb.net,Vb.net,我尝试了隐式缩小从字符串到整数的转换。但我看到,在某些情况下,它是有效的,在某些情况下,它不是 Module Module1 Sub Main() Dim k, l, m, As Integer Dim s As String = "5,12,3" Dim st As String = "2016-5-26" Dim str As String = "26-5-2016&qu

我尝试了隐式缩小从字符串到整数的转换。但我看到,在某些情况下,它是有效的,在某些情况下,它不是

Module Module1
    Sub Main()
        Dim k, l, m, As Integer
        Dim s As String = "5,12,3"
        Dim st As String = "2016-5-26"
        Dim str As String = "26-5-2016"
        k = s      'Works
        'l = st    'does not work
        'm = str   'does not work
        Console.WriteLine("Value of k = {0}", k)

        Console.ReadLine()
    End Sub
End Module

如上所述,有些情况下可以从字符串转换为INT,但有些情况下不能。我的问题是,是否有一个通用规则来定义哪些缩小转换是允许的,哪些是不允许的?与本例类似,我觉得数字字符串(带或不带逗号)可以隐式转换为字符串,但不能转换为字母数字字符串。即使在我使用CInt时,这种观点也是成立的。

使用来避免这个问题。这些转换都没有意义。“5,12,3”没有抛出完全是意外,它将逗号解释为您所在区域中的数千个分隔符。他们在错误的地点并不重要,但没有人认为5123是一个合理的结果。您只能在使用句点的区域设置中获得异常。不要这样做。现在为所有代码启用Option Strict。如果你不知道怎么做,请询问。永远不要依赖隐式缩小转换。如建议的那样,在项目属性和VS选项中启用
选项Strict,以便在所有未来项目中默认启用
。您应该只在特别需要使用后期绑定时才将其关闭,这对大多数人来说是不可能的。即使如此,在那些特别需要它的文件中,只在文件级别关闭它,并将这些文件中的代码量保持在绝对最小。@HansPassant谢谢您的评论