【问题标题】:What is the difference between Dim v As String() and Dim v() As String?Dim v As String() 和 Dim v() As String 有什么区别?
【发布时间】:2010-10-06 16:45:54
【问题描述】:

这可能听起来微不足道,但有什么区别

Dim v As String()

Dim v() As String

在 VB.NET 中?

【问题讨论】:

标签: .net vb.net arrays


【解决方案1】:

没有区别。来自VB.NET Language Specification on Arrays

通过将修饰符添加到现有的类型名称来指定数组类型。修饰符由一个左括号、一组零个或多个逗号和一个右括号组成。

...

也可以通过在变量名上放置数组类型修饰符或数组初始化修饰符来将变量声明为数组类型。在这种情况下,数组元素类型是声明中给出的类型,数组维度由变量名修饰符确定。 为了清楚起见,在同一个声明中同时对变量名和类型名使用数组类型修饰符是无效的

【讨论】:

    【解决方案2】:

    最初,在 Basic 中,您必须定义数组,而不是变量。变量的类型由后缀字符定义:A$ 是字符串,A% 是整数,A# 是双精度。 (并且这三个都是不同的,可以同时使用)(对于单精度,您可以使用 A!,但如果您只使用 A,则这是默认设置)

    最终,程序员开始意识到那些是非常糟糕的设计选择。

    为了解决这个问题,Microsoft 添加了“Option Explicit”,要求您预定义每个变量。为了减少对语言的影响,他们劫持了用于定义数组的“DIM”命令来定义标量变量。

    原来如此:

     DIM A(50)    ' define 51-element single-precision array
    

    然后

     DIM A(50)    ' define 51-element single-precision array
     DIM A$       ' define a string
    

    然后为了摆脱后缀,他们添加了“As {type}语法”

     DIM A(50)    ' define 51-element single-precision array
     DIM B as String 
     DIM C(50) as String ' define 51-element string array.
    

    然后他们使数组大小可变。

     DIM A()    ' define single-precision array
     DIM B as String 
     DIM C() as String ' define string array.
    

    这在定义风格上留下了冲突,所以他们允许两者:

     DIM A()    ' define single-precision array
     DIM B as String 
     DIM C() as String ' define string array.
     DIM D as String() ' define string array.
    

    【讨论】:

      【解决方案3】:

      没有区别。

      Dim v As String()Dim v() As String 都会创建一个字符串数组

      【讨论】:

        【解决方案4】:

        传统上,在 Basic 中,您会将括号放在变量名之后。在 VB.Net 中,如果您愿意,可以将它们放在类型之后。结果是相同的,因此使用任何一种语法都没有区别。这个添加的原因是因为你可以如何构造一个数组。考虑以下代码:

          Public Sub MethodThatExpectsAnArray(ByVal arr() As String)
            '...
          End Sub
        
          Public Sub Main()
            Me.MethodThatExpectsAnArray(New String() {"Hello", "World"})
          End Sub
        

        在调用中,我“即时”构造数组,除了直接分配给方法参数外,没有任何赋值。由于这里没有变量,我必须在类型之后设置括号。为了允许这种语法,Microsoft 可以选择更改您传统上在 Basic 中声明数组的方式,或者允许这两种语法。他们当然选择了后者。

        【讨论】:

          【解决方案5】:

          没有区别。

          【讨论】:

          • v.Length 如果将 v 声明为 String() 将不可用,但如果将 v() 声明为 String 则可用
          • 似乎在我的编译器上可用
          【解决方案6】:

          主要是语义。第一个读作create variable "v" of type string array,第二个读作create array "v" of type string。无论哪种方式,结果都是相同的字符串数组。

          【讨论】:

            【解决方案7】:

            两者的意思没有区别。

            如果您想在一个 dim 语句中声明多个变量,则第二种形式提供了更大的灵活性: dim v(),v2 as string 允许您在同一语句中声明数组类型和非数组类型。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-06-14
              • 2015-12-26
              • 2015-11-02
              • 1970-01-01
              • 2022-12-22
              • 2010-12-09
              • 1970-01-01
              相关资源
              最近更新 更多