Freigeben über


Wichtige Visual Basic-Änderungen in Visual Studio 2012

In der folgenden Tabelle sind Änderungen aufgeführt, die dazu führen können eine Anwendung geändert haben, die in Visual Basic 2010 aus dem Kompilieren in erstellt wurde Visual Basic in Visual Studio 2012 und Änderungen möglicherweise das Laufzeitverhalten einer Anwendung.

Kategorie

Problem

Description

Typrückschluss

In einer return-Anweisung, in der der Operand ein Arrayliteral ist, wird der Ablaufarraytyp aus der Funktionssignatur bestimmt, statt, im Arrayliteral abgeleitet werden.

Vor diese Änderung können Sie ein Arrayliteral in die Stellen zurückgeben, die Sie nicht können, wie im folgenden Beispiel gezeigt:

Function GetArrayLiteral(ByVal number As Integer) As Integer()
    If number < 0 Then
        ' In Visual Studio 2010, this array literal is
        ' is inferred to be an array of objects, which
        ' cannot be converted to an array of integers. 
        ' In the current version, this array literal is
        ' inferred to be an array of integers, which is
        ' the return type of the function. 
        Return {}
    Else
        Return {number}
    End If
End Function

Diese Änderung kann den Laufzeittyp eines Arrayliterals, das breiter als ist, was sie in Visual Basic 2010 war, wie im folgenden Beispiel gezeigt:

Private Sub ArrayLiterals()
    Dim theArray = GetArray()
    Console.WriteLine(theArray.GetType().FullName) 
End Sub

Private Function GetArray() As Object()
    Return {"chromatic", "infinitesimal"}
End Function

' Output in the current version:
'   System.Object[]
' Output in Visual Studio 2010:
'   System.String[]

Lambda-Ausdrücke

In einem For Each Ausdruck können Sie die Steuerelementvariable in einem Lambda-Ausdruck jetzt verwenden.

Die Verwendung einer For Each Iterationsvariable in einem Lambda-Ausdruck verursacht nicht mehr eine Warnung zur Kompilierzeit und hat nicht mehr unerwartete Ergebnisse, wie im folgenden Beispiel veranschaulicht:

Dim methods As New List(Of Action)
For Each word In {"hello", "world"}
    methods.Add(Sub() Console.Write(word & " "))
Next
methods(0)() 
methods(1)() 

' Output in the current version: 
'   hello world
' Output in Visual Studio 2010: 
'   world world

LINQ-Ausdrücke

In einem For Each Ausdruck können Sie die Steuerelementvariable in einem LINQ-Ausdruck jetzt verwenden.

Die Verwendung einer For Each Iterationsvariable in einem LINQ-Ausdruck verursacht nicht mehr eine Warnung zur Kompilierzeit und hat nicht mehr unerwartete Ergebnisse, wie im folgenden Beispiel veranschaulicht:

Dim lines As New List(Of IEnumerable(Of String)) 

For Each number In {1, 2, 3}
    Dim line = From letter In {"a", "b", "c"}
            Select number.ToString & letter

    lines.Add(line) 
Next

For Each line In lines
    For Each entry In line
        Console.Write(entry & " ")
    Next
    Console.WriteLine()
Next

' Output in the current version: 
'  1a 1b 1c
'  2a 2b 2c
'  3a 3b 3c

' Output in Visual Studio 2010: 
'  3a 3b 3c
'  3a 3b 3c
'  3a 3b 3c

Überladungsauflösung

Wenn zwei Überladungen mit Übereinstimmung der generischen Typparameter ein Aufrufer gleichwertig jedoch eine Überladung spezifischer ist, wird mehr bestimmte Überladung verwendet.

Diese Bedingung hat einen Überladungsauflösungskompilierungsfehler in Visual Studio 2010.Im folgenden Beispiel verursacht die Process(theList) Zeile einen Kompilierungsfehler in Visual Studio 2010.In der aktuellen Version entspricht der Zeile die spezifischere Process Überladung der - Methode ab.

Private Sub Test()
    Dim theList As New List(Of Integer)
    Process(theList)
    Dim theQueue As New Queue(Of Integer)
    Process(theQueue)
End Sub
Private Sub Process(Of T)(ByVal theList As List(Of T))
    Debug.WriteLine("first overload")
End Sub
Private Sub Process(Of T)(ByVal x As T)
    Debug.WriteLine("second overload")
End Sub
' Output:
'   first overload
'   second overload

Siehe auch

Referenz

For Each...Next-Anweisung (Visual Basic)

Konzepte

Lambda-Ausdrücke (Visual Basic)

Neues bei Visual Basic in Visual Studio 2012

Weitere Ressourcen

Arrays in Visual Basic

LINQ in Visual Basic

Erste Schritte mit Visual Basic

Wann unterbricht geschützter Sprachenfix?