Condividi tramite


Visual Basic - Ultime modifiche in Visual Studio 2012

Nella tabella seguente sono elencate le modifiche che potrebbero impedire la compilazione di un'applicazione creata in Visual Basic 2010 da compilare in Visual Basic in Visual Studio 2012 e le modifiche potrebbero modificare il comportamento di un'applicazione.

Category

Problema

Descrizione

Inferenza del tipo

In un'istruzione return in cui l'operando è un valore letterale di matrice, il tipo di matrice runtime è determinato dalla firma della funzione anziché essere dedotto dal valore letterale di matrice.

Questa modifica consente di restituire un valore letterale di matrice in posizioni in cui non è indicato, come illustrato nel seguente esempio:

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

Questa modifica potrebbe determinare il tipo di runtime di un valore letterale di matrice contenente più ampio delle attività svolte in Visual Basic 2010, come illustrato nel seguente esempio:

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[]

Espressioni lambda

In un'espressione For Each, è possibile utilizzare la variabile di controllo in un'espressione lambda.

L'utilizzo di una variabile di iterazione For Each in un'espressione lambda non più generato un avviso in fase di compilazione e non ha più risultati indesiderati, come illustrato nell'esempio seguente:

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

Espressioni LINQ

In un'espressione For Each, è possibile utilizzare la variabile di controllo in un'espressione LINQ.

L'utilizzo di una variabile di iterazione For Each in un'espressione LINQ non più generato un avviso in fase di compilazione e non ha più risultati indesiderati, come illustrato nell'esempio seguente:

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

Risoluzione di l

Se due overload con parametri di tipo generico corrispondono a un chiamante in modo corretto ma un overload è più specifico, l'overload più specifico utilizzato.

Questa condizione è verificato un errore in fase di compilazione di risoluzione di l in Visual Studio 2010.Nell'esempio seguente, la linea Process(theList) verifica un errore in fase di compilazione in Visual Studio 2010.Nella versione corrente, la riga corrispondente l'overload più specifico del metodo Process.

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

Vedere anche

Riferimenti

Istruzione For Each...Next (Visual Basic)

Concetti

Espressioni lambda (Visual Basic)

Visual Basic - Novità in Visual Studio 2012

Altre risorse

Matrici in Visual Basic

LINQ in Visual Basic

Guida introduttiva a Visual Basic

Quando una non l'interruzione di linguaggio di interrompendosi?