다음을 통해 공유


Visual Studio 2012의 Visual Basic 주요 변경 내용

다음 표에서 만든 응용 프로그램이 있는 변경 Visual Basic 2010 에 컴파일하지 Visual Studio 2012의 Visual Basic 및 응용 프로그램의 런타임 동작이 변경 될 수 있습니다.

범주

문제

설명

형식 유추

배열 리터럴 피연산자는 반환 문에서 런타임 배열 형식 함수 시그니처 대신 리터럴 배열에서 유추 되 고 결정 됩니다.

이 변경 장소 위치를 이전에 다음 예제와 같이 없습니다 리터럴 배열을 반환할 수 있습니다.

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

배열 리터럴은에 원래 보다 더 넓은 되 고 런타임 형식의이 변경이 발생할 수 있습니다. Visual Basic 2010다음 예제와 같이:

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

람다 식

에 For Each 식, 이제는 람다 식에 컨트롤 변수를 사용할 수 있습니다.

사용 된 For Each 람다 식에 반복 변수를 더 이상 컴파일 타임 경고를 발생 하 고 더 이상이 예기치 않은 결과 다음 예제와 같이:

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 식

에 있는 For Each 식, 이제는 LINQ 식에 컨트롤 변수를 사용할 수 있습니다.

사용 된 For Each LINQ 식에 반복 변수 인해 컴파일 타임 경고 메시지가 더 이상 및 더 이상이 예기치 않은 결과 다음 예제와 같이:

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

오버 로드 확인

제네릭 형식 매개 변수가 있는 두 개의 오버 로드가 호출자가 똑같이 일치 하지만 오버 로드 보다 구체적인 경우 특정 오버 로드가 사용 됩니다.

이 조건은 오버 로드 확인 컴파일 타임 오류 Visual Studio 2010에서 발생할.다음 예제에서는 Process(theList) 선 Visual Studio 2010에서 사용 하면 컴파일 타임 오류가 발생 합니다.현재 버전에 선 특정 오버 로드를 일치 하는 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

참고 항목

참조

For Each...Next 문(Visual Basic)

개념

람다 식(Visual Basic)

Visual Studio 2012 Visual Basic의 새로운 기능

기타 리소스

Visual Basic의 배열

Visual Basic의 LINQ

Visual Basic 시작

주요 언어 수정 주요 변경 되 면?