code

VB.NET에서 DirectCast ()와 CType ()의 차이점

codestyles 2020. 8. 25. 08:04
반응형

VB.NET에서 DirectCast ()와 CType ()의 차이점


저는 VB.NET에 들어간 경험이 많은 C / C ++ / C # 프로그래머입니다. 나는 일반적으로 CType (및 CInt, CBool, CStr)을 캐스트에 사용합니다. 문자 수가 적고 노출 된 첫 번째 캐스팅 방법이기 때문에 DirectCast와 TryCast도 알고 있습니다.

간단히 말해, DirectCast와 CType간에 차이점 (캐스트 효과, 성능 등)이 있습니까? TryCast의 아이디어를 이해합니다.


가장 먼저 주목해야 할 것은 VB.NET은 C #의 (type)instance캐스팅 메커니즘과 직접적인 유사성이 없다는 것 입니다. 두 VB.NET 연산자를 비교하는 데 시작점으로 사용하는 것이 유용하기 때문에이를 제기합니다 (함수 의미가 있더라도 함수가 아니라 연산자입니다).

DirectCast()C # 캐스팅 연산자보다 더 엄격합니다. 이미 캐스팅 중인 아이템이 캐스팅 대상 유형일 때만 캐스팅 할 수 있습니다 . 어떤 변환도하지 않습니다. 예를 들어 C # (int)캐스트를 사용할 때처럼 short에서 int로 캐스트 할 수 없습니다 . 그러나 기본 IEnumerable개체 변수가 실제로 .NET Framework 인 경우 IEnumerable에서 배열로 캐스팅 할 수 있습니다 Array. 물론 개체 인스턴스의 유형이 상속 트리의 캐스트 유형 아래 어딘가에 있다고 가정하면 Object에서 무엇이든 캐스팅 할 수 있습니다.

이것은 더 빨라 지기 때문에 바람직합니다 . 수행해야 할 변환 및 유형 검사가 약간 적습니다.

CType()C # 캐스팅 연산자보다 덜 엄격합니다. 간단한 (int)캐스트 로는 할 수없는 문자열을 정수로 변환하는 것과 같은 작업을 수행 합니다. Convert.To___()___가 캐스트의 대상 유형 인 C #에서 호출하는 것만 큼 강력 합니다. 이것은 매우 강력하기 때문에 바람직하지만 성능의 희생이 따릅니다. 캐스트를 완료하기 위해해야 ​​할 일이 상당히 많기 때문에 DirectCast () 또는 C #의 캐스트 연산자만큼 빠르지 않습니다.

일반적으로 가능한 DirectCast()경우 선호해야합니다 .

마지막으로 TryCast()C # as연산자 와 직접적으로 유사한 캐스팅 연산자 하나를 놓쳤습니다 .


으로 CType당신과 같은 몇 가지 일을 쓸 수 있습니다 Ctype("string",Integer). 그러나 DirectCast위의 문을 사용하면 컴파일 시간 오류가 발생합니다.

 Dim a As Integer = DirectCast("1", Integer) 'Gives compiler error
 Dim b As Integer = CType("1", Integer) 'Will compile

DirectCast보다 제한적 CType입니다.

예를 들어 다음과 같은 오류가 발생합니다.

Sub Main()
    Dim newint As Integer = DirectCast(3345.34, Integer)
    Console.WriteLine(newint)
    Console.ReadLine()
End Sub

Visual Studio IDE에도 표시됩니다.

그러나 이것은 오류를 발생시키지 않습니다.

Sub Main()
    Dim newint As Integer = CType(3345.34, Integer)
    Console.WriteLine(newint)
    Console.ReadLine()
End Sub

참고 URL : https://stackoverflow.com/questions/3056514/difference-between-directcast-and-ctype-in-vb-net

반응형