Was ist der Unterschied zwischen Dim v As String () und Dim v () als String?

Das mag trivial klingen, aber was ist der Unterschied zwischen Dim v As String () und Dim v () As String in VB.NET?

Kein Unterschied. Aus der VB.NET-Sprachspezifikation für Arrays :

Array-Typen werden angegeben, indem einem vorhandenen Typnamen ein Modifikator hinzugefügt wird. Der Modifikator besteht aus einer linken Klammer, einer Menge von null oder mehr Kommas und einer rechten Klammer.

Eine Variable kann auch als Array-Typ deklariert werden, indem ein Array-Typ-Modifikator oder ein Array-Initialisierungs-Modifikator auf den Variablennamen gesetzt wird . In diesem Fall ist der Array-Elementtyp der in der Deklaration angegebene Typ und die Array-Dimensionen werden durch den Variablennamenmodifikator bestimmt. Aus Gründen der Übersichtlichkeit ist es nicht zulässig, einen Array-Typ-Modifizierer sowohl für einen Variablennamen als auch für einen Typnamen in derselben Deklaration zu verwenden .

Ursprünglich mussten Sie in Basic Arrays, aber keine Variablen definieren. Und die Typen von Variablen wurden durch ein Suffix-Zeichen definiert: A $ war eine Zeichenkette, während A% eine ganze Zahl und A # doppelte Genauigkeit war. (und alle drei waren unterschiedlich und könnten gleichzeitig verwendet werden) (Für die einfache Genauigkeit könnten Sie A! verwenden, aber das war der Standard, wenn Sie nur A verwendet haben)

Schließlich kamen die Programmierer zu der Erkenntnis, dass dies unglaublich schlechte Design-Entscheidungen waren.

Um dies zu beheben, fügte Microsoft “Option Explicit” hinzu, bei der Sie jede Variable vordefinieren mussten. Um die Auswirkungen auf die Sprache zu verringern, entführen sie den Befehl “DIM”, mit dem Arrays definiert wurden, um auch skalare Variablen zu definieren.

Also ursprünglich:

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

Dann

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

Um die Suffixe loszuwerden, haben sie die Syntax “As {type}” hinzugefügt.

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

Dann machten sie Array-Größe variabel.

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

Dies führte zu einem Konflikt im Definitionsstil, so dass sie beide erlaubten:

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

Es gibt keinen Unterschied.

Sowohl Dim v As String() als auch Dim v() As String werden ein String-Array erstellen

In Basic würden Sie die Klammern normalerweise nach dem Variablennamen setzen. In VB.Net ist es erlaubt, sie nach dem Typ zu platzieren, wenn Sie möchten. Das Ergebnis ist das gleiche, daher gibt es keinen Unterschied bei der Syntax. Der Grund für diese Hinzufügung ist jedoch, weil Sie ein Array konstruieren können. Betrachten Sie den folgenden Code:

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

In dem Aufruf konstruiere ich das Array “on the fly” ohne irgendeine Zuweisung außer direkt zum method Argument. Da es hier keine Variable gibt, muss ich die Paranthese nach dem Typ einstellen. Um diese Syntax zu ermöglichen, hatte Microsoft die Wahl, entweder zu ändern, wie Sie Arrays traditionell in Basic deklarieren oder beide Syntaxen zulassen. Sie haben sich natürlich für Letzteres entschieden.

Es gibt keinen Unterschied.

Es ist meistens Semantik. Der erste liest als create variable "v" of type string array und der zweite liest als create array "v" of type string . In jedem Fall ist das Ergebnis das gleiche Array von Strings.

Es gibt keinen Unterschied in der Bedeutung der beiden.

Wenn Sie mehrere Variablen in einer Dim-statement deklarieren möchten, bietet die zweite Form mehr Flexibilität: dim v (), v2 als String ermöglicht es Ihnen, Array-Typen und Nicht-Array-Typen in derselben statement zu deklarieren.