Cambios importantes de Visual Basic en Visual Studio 2012

La tabla siguiente se enumeran los cambios que podrían impedir una aplicación creada en Visual Basic 2010 de compilación en Visual Basic en Visual Studio 2012 y los cambios pueden cambiar el comportamiento en tiempo de ejecución de una aplicación.

Categoría

Problema

Descripción

Inferencia de tipos

En una instrucción return donde es un literal de matriz el operando, se determina el tipo de matriz en tiempo de ejecución de la firma de la función en lugar de ser inferido del literal de matriz.

Este cambio permite devolver un literal de matriz en los lugares antes de donde no pudo, como se muestra en el ejemplo siguiente:

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

Este cambio puede producir el tipo en tiempo de ejecución de un literal de matriz que era más ancho que lo que era en Visual Basic 2010, como se muestra en el ejemplo siguiente:

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

Expresiones lambda

En una expresión For Each , ahora puede usar la variable de control en una expresión lambda.

El uso de una variable de iteración For Each en una expresión lambda produce no más una advertencia en tiempo de compilación y no más resultados inesperados, como muestra el ejemplo siguiente:

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

Expresiones LINQ

En una expresión For Each , ahora puede usar la variable de control en una expresión LINQ.

El uso de una variable de iteración For Each en una expresión LINQ produce no más una advertencia en tiempo de compilación y no más resultados inesperados, como muestra el ejemplo siguiente:

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

Resolución de sobrecarga

Si dos sobrecargas con la coincidencia genérica de los parámetros de tipo del llamador un receptor de papel igualmente pero una sobrecarga son más específicas, se utiliza la sobrecarga más específica.

Esta condición produjo un error en tiempo de compilación de la resolución de sobrecarga en Visual Studio 2010.En el ejemplo siguiente, la línea Process(theList) produce un error en tiempo de compilación en Visual Studio 2010.En la versión actual, la línea coincide con la sobrecarga más específica del método 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

Vea también

Referencia

Instrucción For Each...Next (Visual Basic)

Conceptos

Lambda (expresiones) (Visual Basic)

Novedades de Visual Basic en Visual Studio 2012

Otros recursos

Matrices en Visual Basic

LINQ en Visual Basic

Introducción a Visual Basic

¿Cuándo una corrección el no interrumpir de lenguaje está colocando?